面试题:快速找到未知长度单链表的中间节点?

这个问题的解决方法分为普通方法和高级方法。

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

数据结构-单链表进阶之快慢指针原理(快速查找法)相关推荐

  1. 用c语言描述单链表的数据类型,数据结构—单链表(类C语言描述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List).     链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不 ...

  2. 单链表进阶学习 三段

    单链表进阶学习 三段 从尾到头打印单链表: 思路: 实际意义就是逆序打印单链表: 利用栈的操作,先进后出,实现逆序打印效果. (注:不建议直接对单链表进行反转操作.这样会破坏链表本身的结构,在做题和练 ...

  3. php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

    浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...

  4. 数据结构—单链表(类C语言描写叙述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List).     链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不 ...

  5. php mysql 链表_浅谈PHP链表数据结构(单链表)

    链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区, ...

  6. python 单链表是否有回路_(Python3)数据结构--单链表之判断链表是否有环

    前言 有Python基础 有数据结构单链表基础,没接触过的可以看下面链接 https://blog.csdn.net/sf9898/article/details/104946291 原理和实现 有一 ...

  7. 数据结构—单链表(类C语言描述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的) ...

  8. 数据结构 —— 单链表(超详细图解 接口函数实现)

    系列文章目录 数据结构 -- 顺序表 数据结构 -- 单链表 数据结构 -- 双向链表 数据结构 -- 队列 数据结构 -- 栈 数据结构 -- 堆 数据结构 -- 二叉树 数据结构 -- 八大排序 ...

  9. C语言数据结构单链表链表

    数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...

最新文章

  1. 漫画:HTTP之大明邮差
  2. Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)
  3. Django的前世今生
  4. Redis数据类型操作(一) —— String
  5. 微信小程序的wxss好难啊,记录我的搞笑界面
  6. mysql varchar char text
  7. Entity Framework Core 之简单介绍
  8. Activiti源码 之Command与 CommandInterceptor
  9. Android_自定义控件样式
  10. C# DataGridView 全选 反选
  11. scala(13)-----集合(Collection)-------列表
  12. 检查mysql数据库脚本_MYSQL 数据库状态检查脚本(Python版)
  13. 数据结构与算法(零)-前言
  14. 往事不回头,今后不将就~~Fighting
  15. ORA-00001: unique constraint (...) violated解决方案
  16. 重头系统的学习,不会咱就学!2014.6.18
  17. php编辑菱形图案代码,打印菱形图案 (15 分)
  18. 孕妇免疫力低怎么办?就看蛋白粉的功效!
  19. Axure RP9教程 中继器列表
  20. Oracle ORA-01017: invalid username/password;解决完一个12560又来一个

热门文章

  1. 速卖通开店条件和流程最新版
  2. 关于mpi的理论知识以及编写程序来实现数据积分中的梯形积分法。
  3. Java面试总结(2018 - 12 - 10)
  4. Django中的日期和时间格式 DateTimeField
  5. 2.Linux技能要求
  6. node:express:error---填坑之路
  7. iOS开发之功能模块--推送之坑问题解决
  8. toj 2870 理解dijstra
  9. 写给未来产品总监的一封信
  10. golang 开源代理