链表中倒数第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;
}
有两种方法:
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;
}
相关文章推荐
- 虚拟主机无法使用fsockopen操作处理方法
- Eclipse提示No java virtual machine
- unity 面试题
- Harr-like 特征
- 记住我 功能实现
- 《线性代数及其应用》前言翻译
- 老王笔记(树莓派3)-上手篇
- 沟通与表达
- 第二次实验
- 结对编程项目---四则运算(代码)
- 处理器一条指令需要几个时钟周期?
- java String类类型的拓展延伸,以及本周知识储备
- LeetCode109. Convert Sorted List to Binary Search Tree
- Ubuntu 14 查看 docker中对应容器的 IP
- js操作svg旋转
- 递归反转链表
- Android 自定义带圆角的dialog
- Masonry介绍与使用实践:快速上手Autolayout
- 数据库的四个范式之间的区别
- 学习ExtJS的MVC布局