写一个函数,输出单链表的倒是第K个节点。
思路分析:
方法一:用两个指针,p1和p2,p1先将链表遍历一遍,得到链表的长度length,然后二者一起走,当p1指向length-k-1的时候,p2指向的就是倒数第k个节点。
node *search(node *head,int k)
{
int length=0;
node *p=head;
while (p!=NULL)
{
length++;
p=p->next;
}
if (head==NULL||k==0||k>length)
{
return NULL;
}
node *p1=head;
node *p2=head;
for (i<0;i<length-k-1;i++)
{
p1=p1->next;
p2=p2->next;
}
return p2;
}
方法二:用两个指针,p1和p2,p1先走k-1步,p2指向头结点,然后二者一起走,当p1指向尾节点的时候,p2指向的就是倒数第k个节点。
node *search(node *head,int k)
{
int length=0;
node *p=head;
while (p!=NULL)
{
length++;
p=p->next;
}
if (list==NULL||k==0||k>length)
{
return NULL;
}
node *p1=head;
node *p2=head;
for (int i=0;i<k-1;i++)
{
p1=p1->next;
}
while (p1->next!=NULL)
{
p1=p1->next;
p2=p2->next;
}
return p2;
}