题解 | #链表中倒数最后k个结点【图解】#
链表中倒数最后k个结点
http://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9
为了便于演示,假设k=3,链表如下
-
k<=链表长度
维护一个长度为k的链表数组temp,对链表进行遍历,把遍历到的结点按序放入该数组中,当下标i指向数组最后一个位置时,存入当前结点后将令i指向数组首部位置。
当遍历到链表末尾(空结点时),temp中最早存入的结点即为倒数第k个结点。
因为temp长度为k,所存放的结点为最近k步遍历到的结点,故遍历结束时temp中存储的为链表最后k个结点。 那么最早存入的就是最倒数第k个结点。这里也可以把temp理解为一个环形数组,头尾相接,最新的结点会覆盖最旧的结点(下标指向的位置);
下标一直向后移动,指向待覆盖的结点。
当链表到末尾时,下标指向的就是最旧的结点。
public ListNode FindKthToTail (ListNode pHead, int k) {
if(pHead==null) return null;
ListNode[] temp = new ListNode[k];
ListNode now=pHead;
int i=0;
while(now!=null){
temp[i]=now;
if(i==k-1) i=0;
else i++;
now=now.next;
}
if(temp[i]==null) return null;
else return temp[i];
}