代码随想录 - Day6 - 链表
周六复习面试,周一面试,周二一天课(本来半天课结果下午突然加就业指导课 = = 无语)
明天还有面试,哭泣,甚至不想面了,反正没什么通过的希望…
24. 两两交换链表中的节点
画图!画图!画图!
建一个虚拟头结点,然后根据画图的步骤,写出循环内容就完事了
除了要修改的节点,其他节点保持原状就ok
dummy = ListNode(next=head)
cur = dummy
while cur.next != None and cur.next.next != None:
tmp = cur.next
tmp1 = cur.next.next.next
cur.next = cur.next.next
cur.next.next = tmp
cur.next.next.next = tmp1
cur = cur.next.next
return dummy.next
19. 删除链表的倒数第 N 个结点
建虚拟头结点,再用两个指针(?)slow 和 fast
fast 比 slow 先走 n + 1 步之后,两个再同时开始移动。
等到fast.next
为None
,此时再通过slow来删除链表中节点
dummy = ListNode(next=head)
slow, fast = dummy, dummy
while n >= 0:
fast = fast.next
n -= 1
while fast != None:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return dummy.next
面试题 02.07. 链表相交
注意理解题意,两个链表从后往前是一样的(如果有相交部分)
所以先求出两个链表的长度,再求出两个链表长度的差值,然后让 curA
移动到和curB
末尾对齐的位置,再依次进行比较是否相等
curA = headA
curB = headB
la, lb = 0, 0
while curA != None:
la += 1
curA = curA.next
while curB != None:
lb += 1
curB = curB.next
curA, curB = headA, headB
# 让curB为最长链表的头,lenB为其长度
if la > lb:
curA, curB = curB, curA
la, lb = lb, la
for i in range(lb - la):
curB = curB.next
while curA:
if curA == curB:
return curA
else:
curA = curA.next
curB = curB.next
return None
今天就先到这里吧,去复习一下面试题 ┭┮﹏┭┮