代码随想录算法训练营第三天 | 203:移除链表元素 ,206:反转列表, 707:设计链表

42 阅读1分钟

训练营第三天,进入链表(linked list)专题。链表最基础的就是遍历,添加和删除节点,今天的三道题目主要还是熟悉对于链表的一些基本操作。

需要注意的就是对于虚拟头节点 Dummyhead的运用,这一点在涉及到需要删除节点的题目时非常必要,可以保证头节点不受到污染。

题目链接:203. Remove Linked List Elements

这一题就是很经典的对于dummyhead的运用

 def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        dummyhead = ListNode(-1)
        dummyhead.next = head
        cur = dummyhead
        while cur.next:
            if cur.next.val == val:
                cur.next = cur.next.next
            else:
                cur = cur.next
        return dummyhead.next

题目链接:707. Design Linked List

这一题就是考察对于链表的概念性的理解,但是涉及到class中对变量的定义和function的编写,容易在具体实现的时候出现一些小问题(尤其是插入,删除这些涉及到index的)

题目链接:Reverse Linked List

这一题不要想从最后一个节点开始向前反转,而是从头开始每两个节点之间反转一下即可。

    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head:
            return None
        pre = None
        cur = head
        while cur:
            prep = cur.next
            cur.next = pre
            pre = cur
            cur = prep
        return pre