单链表之:如何快速找到倒数第n个节点

题目:如何查找单链表的倒数第n个指针。
算法一:第一次遍历到链表末尾,找到链表长度N;第二遍遍历,找到第N-n个节点。
算法二:设立两个指针,p1指向头节点,p2往前走n步,这样,p2与p1之间间隔n个指针。这样,当p2到达末尾是,p1则为倒数第N-n个节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Node *lastN(Node *head) 
{
Node *p1=head,*p2=head;
for(int i=0;i<n;i++)
{
if(p2==NULL)
return NULL;
p2=p2->next;
}
while(p2)
{
p1=p1->next;
p2=p2->next;
}
return p1;
}