数据结构-单链表进阶之快慢指针原理(快速查找法)
面试题:快速找到未知长度单链表的中间节点?
这个问题的解决方法分为普通方法和高级方法。
1.普通方法即我们大家都能一下子想到的,首先遍历一遍获取总长度L,然后再次遍历循环至L/2即可;时间复杂度为:
O(L+L/2)=O(3/2L)
代码简单实现:
typedef struct {int data;LNode *next;
}LNode,*LinkList;/*
function:普通方法
首先遍历一遍获取总长度L,然后再次遍历循环至L/2即可
*/
LNode *getElement(LinkList L) {if (L == NULL) {return NULL;}int i = 1;LNode *p = L->next;while (p!=NULL){p = p->next;i++;}int j = 1;int mid = i / 2;LNode *midNode = L->next;while (j<mid){midNode = midNode->next;}return midNode;
}
2.高级方法:快慢指针法,设置2个指针*faster,*mid都指向单链表的头节点,其中faster移动的速度为mid的2倍,当faster移动到末尾,mid即在中间位置了,以下是简单实现:
/*
function:快速查找未知长度单链表中间节点
快慢指针法
*/
LNode *fasterGetElement(LinkList L) {LNode *mid, *faster;mid = L->next;faster = L->next;while (faster!=NULL){mid = mid->next;//faster = faster->next->nextfaster = faster->next;faster = faster->next;}return mid;
}
转载于:https://www.cnblogs.com/babac/p/9028466.html
数据结构-单链表进阶之快慢指针原理(快速查找法)相关推荐
- 用c语言描述单链表的数据类型,数据结构—单链表(类C语言描述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不 ...
- 单链表进阶学习 三段
单链表进阶学习 三段 从尾到头打印单链表: 思路: 实际意义就是逆序打印单链表: 利用栈的操作,先进后出,实现逆序打印效果. (注:不建议直接对单链表进行反转操作.这样会破坏链表本身的结构,在做题和练 ...
- php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...
浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...
- 数据结构—单链表(类C语言描写叙述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不 ...
- php mysql 链表_浅谈PHP链表数据结构(单链表)
链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区, ...
- python 单链表是否有回路_(Python3)数据结构--单链表之判断链表是否有环
前言 有Python基础 有数据结构单链表基础,没接触过的可以看下面链接 https://blog.csdn.net/sf9898/article/details/104946291 原理和实现 有一 ...
- 数据结构—单链表(类C语言描述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的) ...
- 数据结构 —— 单链表(超详细图解 接口函数实现)
系列文章目录 数据结构 -- 顺序表 数据结构 -- 单链表 数据结构 -- 双向链表 数据结构 -- 队列 数据结构 -- 栈 数据结构 -- 堆 数据结构 -- 二叉树 数据结构 -- 八大排序 ...
- C语言数据结构单链表链表
数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...
最新文章
- 漫画:HTTP之大明邮差
- Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)
- Django的前世今生
- Redis数据类型操作(一) —— String
- 微信小程序的wxss好难啊,记录我的搞笑界面
- mysql varchar char text
- Entity Framework Core 之简单介绍
- Activiti源码 之Command与 CommandInterceptor
- Android_自定义控件样式
- C# DataGridView 全选 反选
- scala(13)-----集合(Collection)-------列表
- 检查mysql数据库脚本_MYSQL 数据库状态检查脚本(Python版)
- 数据结构与算法(零)-前言
- 往事不回头,今后不将就~~Fighting
- ORA-00001: unique constraint (...) violated解决方案
- 重头系统的学习,不会咱就学!2014.6.18
- php编辑菱形图案代码,打印菱形图案 (15 分)
- 孕妇免疫力低怎么办?就看蛋白粉的功效!
- Axure RP9教程 中继器列表
- Oracle ORA-01017: invalid username/password;解决完一个12560又来一个