用标尺法快速找到单链表的中间结点
2016-03-19 20:20
453 查看
设置两个工作指针search、*mid都指向单链表的头节点。其中 search的移动速度是*mid的2倍。当*search指向末尾节点的时候,mid正好就在中间了。这也是标尺的思想。
附完整代码
// 找到链表的中间节点 Status GetMidNode(LinkList L, ElemType *e) { LinkList search, mid; mid = search = L; while (search->next != NULL) { //search移动的速度是 mid 的2倍 if (search->next->next != NULL) { search = search->next->next; mid = mid->next; //printf("search %d\n", search->data); //printf("mid %d\n", mid->data); } else { search = search->next; } } *e = mid->data; return OK; }
附完整代码
#include <iostream> #include <ctime> #include <cstdlib> #include <cstdio> using namespace std; typedef int ElemType; struct Node { ElemType data; struct Node *next; }; typedef Node LinkList; Node* Create() { Node *head,*p,*q; head=new Node; head->next=NULL; q=head; int n,i; double k; cout<<"请输入您要创建的链表长度:"; cin>>n; cout<<endl; cout<<"请输入链表中每个结点保存的数据:"; for(i=0;i<n;i++) { cin>>k; p=new Node; p->data=k; q->next=p; q=p; } p->next=NULL; cout<<endl<<"链表创建成功"<<endl; return head; } bool Insert(LinkList *L,ElemType x,int i) { LinkList *p,*q=L,*s; int k; for(k=0;k<i;k++) { p=q; q=q->next; if(q==NULL) return false; } s=new Node; s->data=x; s->next=q; p->next=s; return true; } void ShowLink(LinkList *L) { Node *head,*p; head=L; p=head->next; while(p) { cout<<p->data<<" "; p=p->next; } cout<<endl; return ; } int SearchMid(LinkList *L) { LinkList *p,*q; p=q=L; while(q->next!=NULL) { if(q->next->next!=NULL) { q=q->next->next; p=p->next; } else {q=q->next; p=p->next; } } return p->data; } int main() { int k; LinkList *L; L=Create(); cout<<"显示创建的链表:"; ShowLink(L); k=SearchMid(L); cout<<"链表中间结点保存的数据为:"<<k<<endl; return 0; }
相关文章推荐
- 【HDU 5646】DZY Loves Partition
- 快速排序详细解释
- js积累
- PS 查看选定图层的高宽
- 第14条:理解“类对象”的用意
- 第四周项目5-用递归方法求解(1)
- c++四种类型转换
- 第4周-项目5-(1)
- Git的常用命令
- Wireshark使用drcom_2011.lua插件协助分析drcom协议
- 我自己使用github上传小demo的常用步骤
- 第13条:用“方法调配技术”调试“黑盒方法”
- 构建之法阅读笔记03
- linux下基本性能监控命令和性能分析(vmstat)
- LeetCode107—Binary Tree Level Order Traversal II
- Jenkins进阶系列之——16一个完整的JENKINS下的ANT BUILD.XML文件
- python decorator装饰器
- 第12条:理解消息转发机制
- 机器学习:启发式算法
- 取消Android标题栏