题解 | #链表中倒数最后k个结点【图解】#

链表中倒数最后k个结点

http://www.nowcoder.com/practice/886370fe658f41b498d40fb34ae76ff9

为了便于演示,假设k=3,链表如下

  1. k<=链表长度
    维护一个长度为k的链表数组temp,对链表进行遍历,把遍历到的结点按序放入该数组中,当下标i指向数组最后一个位置时,存入当前结点后将令i指向数组首部位置。
    当遍历到链表末尾(空结点时),temp中最早存入的结点即为倒数第k个结点。
    因为temp长度为k,所存放的结点为最近k步遍历到的结点,故遍历结束时temp中存储的为链表最后k个结点。 那么最早存入的就是最倒数第k个结点。

    这里也可以把temp理解为一个环形数组,头尾相接,最新的结点会覆盖最旧的结点(下标指向的位置);
    下标一直向后移动,指向待覆盖的结点。
    当链表到末尾时,下标指向的就是最旧的结点。

alt

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];
    }
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务