0
点赞
收藏
分享

微信扫一扫

天池leetcode基础训练营 - 链表

醉东枫 2022-02-16 阅读 40

例题1 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head, val):
        head = ListNode(next = head)
        pre = head
        while pre.next:
            if pre.next.val == val:
                pre.next = pre.next.next
            else:
                pre = pre.next
        return head.next

 因为在删除链表中元素a的时候,需要把元素a前面的一个元素链接到a后面的一个元素上去。因此在循环过程中,立足于pre这个节点,如果pre.next的值等于给定的val,就把pre.next更新为pre.next.next。

例题2 旋转链表

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        if not head:
            return None
        length = 0
        temp = head
        while temp.next:
            length += 1
            temp = temp.next
        temp.next = head 
        # 让原链表的最后一个元素指向原链表的head,相当于变成了一个循环链表
        k = k % (length + 1) # length + 1 为链表的长度
        temp = head
        # 需要将第k、k+1个元素处断开,需要找到第k个元素,令其指向none,同时令第k+1个元素成为head
        for i in range(length - k): 
            temp = temp.next
        head = temp.next
        temp.next = None
        return head
举报

相关推荐

0 条评论