获取单链表中倒数第N个结点数据
来源:互联网 发布:linux配置samba服务器 编辑:程序博客网 时间:2024/05/29 09:50
**不管是顺数n个还是倒数n个,其实都是距离-标尺问题。标尺是一段距离可以用线段的两个端点来衡量,我们能够判断倒数第一个节点,因为他的next==NULL。如果我们用两个指针,并保持他们的距离为n,那么当这个线段的右端指向末尾节点时,左端节点就指向倒数第n个节点。
所以思路出来了:建立两个指针,第一个先走n步,然后第2个指针也开始走,两个指针步伐(前进速度)一致。当第一个结点走到链表末尾时,第二个节点的位置就是我们需要的倒数第n个节点的值。**
while (i < n && firstNode->next != NULL){ //正数N个节点,firstNode指向正的第N个节点 i++; firstNode = firstNode->next; printf("%d\n", i);}
然后两个节点都开始走。 firstNode 从停下的地方继续走,而 secNode 则是从表头开始走。很明显,当 firstNode 走到表尾的时候,secNode 就正好走到表的倒数第 n 个数了。
while (firstNode != NULL){ //查找倒数第N个元素 secNode = secNode->next; firstNode = firstNode->next; //printf("secNode:%d\n", secNode->data); //printf("firstNode:%d\n", firstNode->data);}
这个是“距离 - 标尺”的典型例子。求整数第 n 个数呢?自己思考吧。
附完整代码
#include <iostream>using namespace std;#define MaxSize 100typedef int ElemType;struct Node{ ElemType data; Node *next;};Node* Create(){ int n,i; cout<<"创建单链表:"<<endl; cout<<"请输入你要创建链表的长度:"; cin>>n; cout<<endl; int A[MaxSize]; cout<<"请输入你要创建的链表数据:"; for(i=0;i<n;i++) cin>>A[i]; cout<<endl; Node *head,*p,*q; head=new Node; head->next=NULL; p=head; for(i=0;i<n;i++) { q=new Node; q->data=A[i]; p->next=q; p=q; } q->next=NULL; return head;}void Showlink(Node *head){ cout<<"显示链表中的数据:"; Node *p=head; p=p->next; while(p) { cout<<p->data<<" "; p=p->next; } cout<<endl; return ;}ElemType Findlastth(Node *head,int i) //找寻链表中倒数第N个数{ int k=i; Node *p,*q; p=q=head->next; while(k>1) { q=q->next; k--; } if(q->next==NULL) return p->data; while(q->next) { p=p->next; q=q->next; } return p->data;}int main(){ int i; Node *head; head=Create(); Showlink(head); cout<<"请输入您要找的链表倒数第几个数:"; cin>>i; cout<<"您要找的数为:"<<Findlastth(head,i)<<endl; return 0;}
0 0
- 获取单链表中倒数第N个结点数据
- 小程序:删除单链表中倒数第n个结点
- 删除链表中倒数第n个结点
- 链表倒数第n个结点
- 删除链表中倒数第n个结点
- 删除链表中倒数第n个结点
- 获取链表中倒数第k个结点
- 输出单链表中倒数第k个结点
- 找出单链表中倒数第 K个结点
- 查找单链表中倒数第k个结点
- 输出单链表中倒数第k个结点
- 寻找单链表中倒数第k个结点
- 输出单链表中倒数第k个结点
- <LeetCode> 题166:链表倒数第n个结点
- <LeetCode> 题174:删除链表中倒数第n个结点
- leetcodeSubmission Details 删除链表倒数第n个结点
- 查找链表中的倒数第n个结点
- 删除链表的倒数第n个结点
- Jenkins进阶系列之——15Maven获取Jenkins的Subversion的版本号
- LeetCode107—Binary Tree Level Order Traversal II
- Java基础之异常篇
- 取消Android标题栏
- 第4周-项目5-(1)
- 获取单链表中倒数第N个结点数据
- 计算机网络之传输层总结
- eclipse的两个不同程序并排摆放,便于查看
- python decorator装饰器
- linux下基本性能监控命令和性能分析(vmstat)
- [数位dp+二分] LightOJ 1105 - Fi Binary Number
- Jenkins进阶系列之——16一个完整的JENKINS下的ANT BUILD.XML文件
- 第四周项目5-用递归方法求解(1)
- c++四种类型转换