您的位置:首页 > 其它

链表中倒数第k个数

2016-03-30 19:49 197 查看
问题:求一个链表中的倒数第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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: