代码随想录 - Day6 - 链表

代码随想录 - 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.nextNone,此时再通过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

今天就先到这里吧,去复习一下面试题 ┭┮﹏┭┮

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值