代码随想录训练营Day4:LeetCode24.两两交换链表中节点LeetCode19.删除链表倒数第N个节点 面试题02.07链表相交 LeetCode142.环形链表(二)

24.两两交换链表中节点

(一)思路

1.定义一个虚拟节点和一个cur指针,让cur指针指向虚拟节点

2.这样每次cur->next和cur->next->next就是要交换的元素

3.循环条件:cur->next!=nullptr&&cur->next->next!=nullptr

4.循环语句中,首先先定义一个first=cur->next,second=cur->next->next,和临时节点,存放second后一个节点

(二)注意事项

1.每一次交换之后都要更新cur指针 cur=first;

19.删除链表倒数第N个节点

(一)思路

1.定义两个指针都指向虚拟节点,先让快指针移动N+1步

2.然后slow和fast一起移动,每次移动一步,当fast==nullptr的时候结束循环

3.此时slow指向的就是要删除元素的前一个元素,cur->next=cur->next->next;

面试题02.07链表相交

(一)思路

1.先求出两个链表的长度

2.将长的链表作为A链表方便处理 

swap(lenA,lenB);

swap(A,B);

3.求出两个链表长度的差值,A链表先移动差值步

4.然后开始比较两个链表的节点是否相等 注意:这里比较的是节点是不是同一个,而不是单纯的数值

142.环形链表(二)

(一)思路

1.定义两个指针slow走一步,fast走两步,当两指针相遇的时候就说明是环形链表

2.返回链表开始循环的入口节点

2(x+y)=x+y+n(y+z)

x=(n-1)(y+z)+z

n为圈数

所以x=z

定义一个index1指向头节点,定义一个index2指向slow/fast节点,当index1==index2时就是循环入口节点

心得

想不出来,真的想不出来,今天刷了四道题花费了一个小时三十六分钟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值