剑指Offer-链表中倒数第k个结点

解题思路借鉴 https://juejin.im/entry/5ad76bddf265da504460302f 代码不一样

题目描述

输入一个链表,输出该链表中倒数第k个结点。

标题思路

为了能够只遍历一次就能找到倒数第k个节点,可以定义两个指针:

快指针从链表的头指针开始遍历向前走k-1,慢指针保持不动; 从第k步开始,慢指针也开始从链表的头指针开始遍历; 由于两个指针的距离保持在k-1,当快指针到达链表的尾结点时,慢指针正好是倒数第k个结点。 下图是找到该链表的倒数第3个结点的示意图。 代码

public ListNode getKthFromEnd(ListNode head, int k) {
        if(head.next==null&&k==1) return  head;
        ListNode first=head;
        ListNode second=head;
        while(k - 1 > 0) {
            k--;
            first = first.next;
        }  
        while (first.next!=null){
            first=first.next;
            second=second.next;
        }
       return second;

    }
经验分享 程序员 微信小程序 职场和发展