训练营第三天,进入链表(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