一、移除链表元素
构造虚拟链表,虚拟链表的头节点的指针指向链表头节点
二、设计链表
构造函数创建新的链表节点对象
三、反转链表
思想:改变指针指向,利用temp指针指向每次断开链表的head位置,和双指针更改指向
双指针or递归
四、两两交换相邻节点
不改变节点值的情况下考虑修改指针指向
添加虚拟头节点,使temp指向头节点,交换顺序依次为:temp.next=cur, pre.next=cur.next, cur.next=pre,最重要的是使temp=pre,这样才能保证后续交换pre和cur的指向正确
五、删除链表倒数第N个节点
思想:双指针,fast和slow初始指向虚拟头节点,,fast比slow多后移n步,之后fast和slow同步后移知道fast到达链表末尾,注意此时slow的下一个才是要删除的节点
六、链表相交
思想1:两个链表尾部对齐,长的链表后移(两链表长度之差)位,循环,两节点不相等就同时后移
思想2:双指针。A表循环完循环B,(重合部分为c),一定有a+c+b=b+c+a,A循环B时一定会和B循环A时的c部分相交。(c也可能是null)
七、环形链表
思想:双指针,fast走两步,slow走一步,有环肯定会相遇
1、是否有环
fast走两步,slow走一步,直到fast=slow(相遇点),(相当于slow走了x+y步,fast走了x+y+n(y+z)步,2(x+y)=x+y+n(y+z),想知道的值是x,那么x=(n-1)(y+z)+y )
2、入口节点
此时重新将slow返回head,fast走一步,slow走一步,直到fast=slow(入口点)(此时slow走了x步,fast走了(n-1)(y+z)+y步)
标签:slow,指向,fast,链表,节点,指针 From: https://www.cnblogs.com/LiChaoyue-11/p/18051568