博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
腾讯面试题
阅读量:5287 次
发布时间:2019-06-14

本文共 1828 字,大约阅读时间需要 6 分钟。

快速找到未知长度单链表的中间节点

使用快慢指针,当一个指针i指向下一个节点时,另一个指针j指向下一个节点的下一个节点。

即j的移动速度是i的两倍,当j指向最后一个节点时,i指向链表的中间节点

代码如下:

#include
#include
typedef int ElemType;typedef struct node{ ElemType data; struct node *next;}LinkList;LinkList *CreateListTail(){ LinkList *p,*r,*head; int i; head = (LinkList *)malloc(sizeof(LinkList)); /* L为整个线性表 */ r=head; /* r为指向尾部的结点 */ for (i=0; i < 20; i++) { p = (LinkList *)malloc(sizeof(LinkList)); /* 生成新结点 */ p->data = rand()%100+1; /* 随机生成100以内的数字 */ r->next=p; /* 将表尾终端结点的指针指向新结点 */ r = p; /* 将当前的新结点定义为表尾终端结点 */ } r->next = NULL; /* 表示当前链表结束 */ return head;}void print(LinkList *L){ LinkList *p1; p1=L->next; int n=20; while(n--) { printf("%d\t",p1->data); p1=p1->next; } printf("\n"); }int GetMidNode(LinkList *L,ElemType *e){ LinkList *search,*mid; search=mid=L; while(search->next!=NULL) { if(search->next->next!=NULL) { search=search->next->next; mid=mid->next; } else search=search->next; } *e=mid->data; return *e;}int main(){ LinkList *head; int t,e; printf("1、创建链表\n2、查看链表\n3、查找中间节点数据\n"); printf("请输入你的选项:\n"); while(t) { scanf("%d",&t); switch(t) { case 1: head=CreateListTail(); print(head); break; case 2: print(head); break; case 3: e=GetMidNode(head,&e); printf("%d\n",e); break; default: exit (0); } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/52Cassie/p/4817649.html

你可能感兴趣的文章
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
12010 解密QQ号(队列)
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
旅途上看的电影和观后感
查看>>
Ztree异步树加载
查看>>
关于IE和火狐,谷歌,Safari对Html标签Object和Embed的支持问题
查看>>
poj3320 Jessica's Reading Problem(尺取思路+STL)
查看>>
分布式计算开源框架Hadoop介绍
查看>>
坏的事情不都会带来坏的结果
查看>>
RPC的基础:调研EOS插件http_plugin
查看>>