链接
牛客:链表中倒数第k个结点
LeetCode:剑指 Offer 22. 链表中倒数第k个节点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路
正常情况下我们需要遍历两边才能找到链表,第一遍先遍历知道链表的长度,第二遍遍历找到结点。有没有能够遍历一遍链表就找到结点的方法呢?可以先让一个结点遍历到第k个结点,然后设置另一个结点从开始遍历,两个一起遍历,等先走的那个结点到末尾时后走的那个正好是倒数第k个结点。
需要注意的是,涉及到链表的题目有思路只是最基本的,指针的相关操作要格外注意。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode former = head, latter = head;
for (int i = 0; i < k; i++) {
if (former == null) {
return null;
}
former = former.next;
}
while (former != null) {
former = former.next;
latter = latter.next;
}
return latter;
}
}