24 两两交换链表节点
24和19都需要虚拟节点的哈!
19 移除倒数第n个元素
这里看卡哥的写了一版。就是快指针走n+1步。再让慢指针开走,此时快指针也开始走。直到快指针指到空为止。
看了这个题我其实心里在想为什么不能用一个指针来写。就是直接size-n步就好了。后来我才发现,题目没有告诉size大小,所以要获得这个数字还要先遍历一遍求长度。明白这个点的时候我才加深了对于双指针在这里使用的奥义。
我写了一个指针这个版本的答案在图二。
160 链表相交
在于A组和B组的比较对象是指针,而不是数值。其中在计算出A和B的长度之后有一段是如果lenA>lenB就互换的,是为了保证后面的代码能够顺利运行。
环形链表
数学推理:重点在于慢指针每次走一步,快指针每次走2步。如果走三步,会这样:当n为奇数的时候,右半部分不是一个非负整数,但x是一个非负整数,所以会不满足条件。
之后就是相遇之后找出口,这个比较容易理解。当n=1时,x=z,这个巧妙的发现可以直接令一个index从head再开始。当两个指针碰头的时候就是出口了!
这三道题内容上是层层递进的。