版权声明:转载请注明来源 https://blog.csdn.net/tangyuan_sibal/article/details/88431927
输入一个链表,输出该链表中倒数第k个结点。
思路1:遍历两次链表,第一次计算总共有几个节点,然后求倒数第k个节点的位置(n-k+1),但是要遍历两次,感觉不够爽,
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode p = head;
ListNode q = head;
int i = 0;
for(;p!=null;i++)
{
p = p.next;
}
for(int j=0;j<i-k;j++)
{
q = q.next;
}
if(k>i)
return null;
return q;
}
}
思路2:设置两个指针,第一个p指针先走,等第一个指针走了k-1步之后,第二个q指针开始走,他们直接差了k个身位,当p走到尽头时,q刚好在倒数第k个位置。
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode p ,q;
p = q = head;
int i = 0;
for(;p!=null;i++)
{
if(i>=k)
q = q.next;
p = p.next;
}
return i<k?null:q;
}
}