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时就是循环入口节点
心得
想不出来,真的想不出来,今天刷了四道题花费了一个小时三十六分钟