classSolution:defdeleteDuplication(self, p):# write code here
root = ListNode(0)
root.next= p
pre = root
while p:if p.nextand p.val == p.next.val:while p.nextand p.val == p.next.val:
p.next= p.next.next
p = p.next
pre.next= p
else:
pre = p
p = p.next
重複節點保留:單循環
# 待補充
2. 鏈表倒數第k個節點
快慢指針
classSolution:defFindKthToTail(self, head, k):# write code here
slow = head
fast = head
for _ inrange(k):ifnot fast:returnNone
fast = fast.nextwhile fast:
slow = slow.next
fast = fast.nextreturn slow
3. 反轉鏈表
三指針
classSolution:# 返回ListNodedefReverseList(self, pHead):# write code here
head = pHead
if head ==Noneor head.next==None:return head
pre =Nonewhile head:
nex = head.next# 記錄當前節點的下一節點
head.next= pre # 當前節點指向取反
pre = head # nex向前走一步
head = nex # head向前走一步return pre
4. 合併排序鏈表
classSolution:# 返回合併後列表defMerge(self, p1, p2):# write code here
cur = head = ListNode(0)# 建立helper指針while p1 and p2:if p1.val<=p2.val:
cur.next= p1
p1 = p1.nextelse:
cur.next= p2
p2 = p2.next
cur = cur.nextif p1 ==None:
cur.next= p2
elif p2 ==None:
cur.next= p1
else:
cur.next=Nonereturn head.next