1.两两交换链表中的节点
易错点:根据运算规则,cur->next!=null要先写先判断,不然cur->nextr->next!=null先判断的话,会报空指针异常
写代码的时候还是把图画出来更不容易出错,你可以先写 cur->next = cur->next->next,但是一会发现,要操作第一个节点的时候已经丢失了第一个节点的地址,所以需要temp先储存第一个节点的地址,因为涉及到第三个节点,所以第三个节点也需要保存。
思考:为什么循环终止条件是且?想错了,while里面是循环条件
2.删除链表的倒数第N个节点
双指针的典型应用、虚拟头节点
要点:想改变某个节点,操作的一定是他前面的节点
怎么找到倒数呢,让快指针先走n+1步
3.环形链表II
一是判断是否有环,二是找到环的入口
快慢指针,如果不相遇说明是直线,如果相遇说明都进入了环内,快指针每次走两个节点,慢指针每次走一个节点,相对速度是一个节点,同向追击问题,他们两一定会相遇,而如果相对速度在两个节点,有可能会跳过不会相遇
另一个点,慢指针一定在没走完一圈之前就会与快指针相遇,为什么?因为他们俩的速度,满指针如果走完一圈,快指针必定走完两圈,快比慢多了一圈,相遇之前,慢指针不可能走完一圈