题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路
定义两个指向链表头的指针a、b,先令b走k步指向第k节点,然后两个指针同时向后移动,直到b为指向null时,a指向的即为倒数第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 a,b;
a = b = head;
int i = 0;
for( ; b != null ; i ++){
if(i >= k)
a = a.next;
b = b.next;
}
return i < k ? null : a;
}
}
本文介绍了一种高效求解链表中倒数第K个结点的算法,通过双指针技巧,避免了两次遍历链表的复杂度,实现了O(n)时间复杂度和O(1)空间复杂度的解决方案。

2万+

被折叠的 条评论
为什么被折叠?



