输入一个链表,输出该链表中倒数第k个结点。
题目给出的链表,不能够得知链表的长度,如果得到了链表的长度,那么遍历 length - k 就可以得到倒数第 k 个结点
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function FindKthToTail(head, k)
{
if( k > count || k < 0) return ;
var current = head;
var count = 0;
while(current){
count++;
current = current.next;
}
current = head;
for(var i = 0; i < count - k ; i++ ){
current = current.next;
}
return current;
}
但是这样的时间复杂度就是 O(2N) 而且为了得到链表的长度而去遍历这个链表,就有点浪费。
我们可以借助两个指针,一个先走,另一个走剩下的部分
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function FindKthToTail(head, k)
{
var p = head,
q = head;
var i = 0;
while(q !== null){
if(i >= k) p = p.next;
q = q.next;
i++;
}
return i < k ? null : p;
}
下一篇:15-反转链表