题目
输入一个链表,输出该链表中倒数第k个结点。
思路
刚开始想的是先遍历一遍得出总节点数,然后算出第k个在正数哪个位置(不放代码了)。后来过了看评论区发现了更好的思路。
设置两个标记节点,一个节点 la 先走 k-1 步,这样另一节点 lb 此刻就处于倒数 k 个位置(相对于 la)。所以只要使得 la 节点到最后一个节点,那么 lb 就是绝对的倒数第 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) {
if(head == null || k <= 0)// 注意 k=0
return null;
ListNode la = head;
ListNode lb = head;
for(int i=0; i<k-1; i++){
la = la.next;
if(la == null)
return null;
}
la = la.next;//使得 la 提前一步结束,保证 lb 有数据
while(la != null){
la = la.next;
lb = lb.next;
}
return lb;
}
}
如有错误或不合理的地方,敬请指正~
加油!!