代码随想录算法训练营第四天|24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

24.两两交换链表中的节点
题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/
思路:初始时,cur指向虚拟头结点,然后进行如下三步
在这里插入图片描述
在这里插入图片描述
然后将cur指向第三个节点

小结:

  1. 两两交换的前提是节点数是偶数,所以要在循环条件中加以约束
  2. 做题中犯了下面这样的错误:在这里插入图片描述注意在第一步中cur的指向已经发生了变化,所以第三步中1所在的节点指针应该是temp->next->next->next在这里插入图片描述
    19.删除链表的倒数第N个节点
    题目链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/

思路

  1. 首先想到的是变成删除正数第size-N+1个节点。(注意链表下标也是从0开始)
    在这里插入图片描述
    这里犯了一个错,index写成index=size-n+1;

  2. 看了卡哥的题解,使用快慢指针
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    小结:双指针法在前面的删除数组中的元素也用到过。

面试题 02.07. 链表相交
题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/
思路:求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置(A是长度较长的链表)
在这里插入图片描述
比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。
在这里插入图片描述
卡壳点:找到最长链表,并赋值长的长度。

142.环形链表II
题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/
思路:定义两个指针,一个指针每次移动两步,一个指针每次移动一步
卡壳点:如何找到环的入口
在这里插入图片描述
相遇时: slow指针走过的节点数为: x + y, fast指针走过的节点数:x + y + n (y + z),n为fast指针在环内走了n圈才遇到slow指针, (y+z)为 一圈内节点的个数A。从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值