代码随想录Day4(链表part2)● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II

24-两两交换链表中的节点

这里还是使用虚拟头节点,这样不需要考虑头节点这个特殊情况了。那该怎么(a,b)两两交换呢?首先我们要找到需要两两交换的前一个节点pro,先让pro指向b,然后让b指向a,最后让a指向b的下一个节点,这样除了我们自己设置的虚拟头节点以外,我们还需要记录三个节点,分别是fir,sec和thr,那么循环何时终止呢?当节点个数是奇数时,就是当我们的pro.next==null;偶数时则是pro.next.next==null。这样终止条件也分析出来了,pro节点在每一循环之后怎么移动呢?当然是向后移动两位。具体我写的代码放到下边。befe853f57af45fca4d23eec8382f62c.png

19-删除链表的倒数第n个节点

题意是删除倒数第n个节点,我第一遍的想法就是先求出有多少个节点sum,然后删除第 sum-n个节点,看完讲解之后我发现我那个方法有点原始人,简单的方法是定义一个虚拟头节点,定义一个快指针,一个慢指针都指向这个虚拟头节点,我们让快指针和慢指针的距离差等于n+1,这样就能保证当快指针指向最后一个节点时,慢指针恰好指向倒数第n+1个节点的位置,这样只需将慢指针.next=慢指针.next.next就可以了

545df9c860514696a7195f8f0802238f.png

 链表相交

这道题真的困扰我挺久也感觉很烦,当时一直在找空指针异常的bug,好吧先说我的思路,首先我们要计算出a链表和b链表的长度,因为链表相交必须是长度相等,计算出长度差,将长链表的头移动长度差个位置,然后进循环,如果两个链表相等则返回a或者b,如果不想等则同时向后移动,如果循环结束还没找到,则返回null

06e4482fa12a4555b3ca90e9c285625f.png

我的问题就是在计算长度之后,没有给a和b重新付值!

142-环形链表2⃣️

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值