问题:求一个链表中的倒数第k个数。
有两种方法:
1.递归:
由于不知道要找的结点与开始的结点之间有多少个结点,让我们求的是倒数第k个结点。可以利用栈,把所的结点存起来,出栈时进行计数。直到第k个结点。
void nthNode(Node *head,int k,int &i)
//k 是倒数第几个 i 是结点个数 递归
{
if(head==NULL)return ;
nthNode(head->next,k,i);
i++;
if(k==i)
{
cout<<head->data<<" ";
return ;
}
}
2.快慢指针法:
可以用两个指针,两个指针间的距离是k , 当第一个指针到达末尾时,第二个正好在倒数第k个结点上。
void nthNode(Node *head,int k)
{
Node *p=head;
Node *q=head;
for(int i=0;i<k&&p!=NULL;i++)
{
//走k个next指向了第k+1 个结点
p=p->next;
}
if(!p)return ;
while(p)
{
q=q->next;
p=p->next;
}
cout<<q->data<<endl;
}