写在前面
本人因准备秋招,决定从2024.6.5日起开始正式刷题。之前虽然也陆续刷过,但总是比较零散(力扣Top100只刷了30道),这次真的拖不起了,所以开此贴,请大家监督我。
本贴主要以记录刷题思路为主,不能直接运行,是一种不太标准的伪代码。我用python编程。
6.8完成情况(DAY4)
第一题看完视频后基本一次复现。第二题实际采用的思路是fast“抢跑N步”,而不是N+1(fast会指向None),两种思路都能理解,但我能接受N步法。
两两交换链表中的节点24
虚拟头节点
dummy=ListNode()
dummy.next=head
cur = dummy
while cur.next!=None and cur.next.next!=None:
tmp1=cur.next
tmp2=cur.next.next.next
cur.next = cur.next.next
cur.next.next=tmp1
tmp1.next=tmp2
cur=cur.next.next #没有三个next
return dummy.next
删除链表的倒数第N个节点19
dummy-1-2-3-None
现在要删倒1节点,fast要先动【1】次到1,然后fast和slow一起移动【2】次才能保证slow在倒1节点的前一位
虚拟头节点,快慢指针
dummy=ListNode()
dummy.next = head
fast, slow=dummy, dummy #不是0
while n and fast.next!=None: #fast抢跑n步,slow不动,为了让fast指向最后一个节点时,slow刚好指向倒N个节点的前一个节点
fast=fast.next, n-=1
while fast.next:
fast=fast.next, slow=slow.next
slow.next = slow.next.next
return dummy.next
面试题 02.07. 链表相交 160
感觉这道题目有点stupid,虽然理解了步骤,但不知道在干啥,死记住流程吧
求两链表长度-把curB作为长链,curB移到curA对应位置-一起比较,找相等的指针
cur=headA
sizeA=1
while cur.next:
cur=cur.next
sizeA += 1
cur=headB
sizeB=1
while cur.next:
cur=cur.next
sizeB += 1
curA, curB = headA,headB #统计完了,别忘了重新把指针归位
if sizeA > sizeB:
sizeA, sizeB = sizeB, sizeA
headA, headB = headB, headA
curA, curB = headA, headB
diffsize = sizeB - sizeA
while diffsize:
curB=curB.next, diffsize -= 1
while curA:
if curA == curB:
return curA
else:
curA=curA.next, curB=curB.next
return None
环形链表II 142
快慢指针
主要思想就是,快指针一定会在环的后面追上慢指针,能追上的话(fast==slow)就有环
确定入环位置有一个小定理证明,找恒等关系
fast,slow=head, head
if not fast:
return None
while fast.next and fast.next.next:
fast = fast.next.next
slow = slow.next
if fast == slow:
index1=fast
index2=head
while index1!=index2:
index1=index1.next
index2=index2.next
return index2
return None