剑指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; }