双指针解决链表倒数问题
链表中倒数第k个结点
http://www.nowcoder.com/questionTerminal/886370fe658f41b498d40fb34ae76ff9
这道题用双指针即可,倒数第k个,其实就是正数n-k+1个。先让快指针走k步,然后slow从head出发,跟fast一步一步走,当fast走到尾(空节点)时,slow的位置正在n-k+1。
但是还得注意一些极值情况,比如链表为空或者k大于链表节点时。
上代码:
public ListNode FindKthToTail (ListNode pHead, int k) { //处理链表为空的情况 if(pHead == null) return null; ListNode fast = pHead; ListNode slow = pHead; //可能会有k大于链表节点的情况,所以多加个fast != null的判断 while(fast != null && k-- > 0){ fast = fast.next; } if(k > 0){ return null; } while(fast != null){ fast = fast.next; slow = slow.next; } return slow; }
字节算法题解 文章被收录于专栏
最近在刷字节的题库!! 春招给我冲!!!