数据结构:链表(2)

目录

一、链表进阶函数

函数①:找中间节点

函数②:找倒数第k个节点

函数③:链表的倒置

函数④:链表的冒泡排序【约40行】

函数⑤:链表的选择排序(每一轮选一个最小的放前边)【36行】

[函数⑥: 判断链表是否有环、环有多大(获得环长)、环入口位置【知道思想即可】](#函数⑥: 判断链表是否有环、环有多大(获得环长)、环入口位置【知道思想即可】)


一、链表进阶函数

函数①:找中间节点

分析:先定义两个空指针(一个快指针一个慢指针)指向链表第一个有效元素,再使快指针后移两个节点慢指针后移一个节点,重复移动的步骤,直到快指针指向空,则慢指针指向链表的中间
代码:

结果:

函数②:找倒数第k个节点

分析:先定义两个空指针(一个快指针一个慢指针)指向链表第一个有效元素,再使快指针后移k个节点,r再使两个指针同时后移,直到快指针指向空,则慢指针指向链表倒数第k个节点
代码

结果

函数③:链表的倒置

代码

调用

结果

函数④:链表的冒泡排序【约40行】

分析:定义两个指针(前指针和后指针),分别指向第二个有效节点和第一个有效节点,若前比后大,则只交换数据(节点存的地址不变),这两个指针后移一个节点,如此往复便执行完一轮...


代码

调用

结果

函数⑤:链表的选择排序(每一轮选一个最小的放前边)【36行】

分析

其核心思想与数组的选择排序一脉相承,都是反复从待排序序列中找出最小(或最大)元素,将其放到每一轮最前边

代码

调用

结果

函数⑥: 判断链表是否有环、环有多大(获得环长)、环入口位置【知道思想即可】

分析

判断链表是否有环:快指针走2步,慢指针走1步,两个指针相遇即为有环

环有多大(获得环长):从相遇点走一圈,计数

环入口位置:两个指针,一个指针指向开头,一个指针指向相遇点,两个指针都同时向后走,相遇点即为环入口位置

相关推荐
智者很聪明18 分钟前
数据结构之栈和队列
c语言·数据结构
uesowys22 分钟前
算法开发指导-数据结构-Tree
数据结构·算法·
白太岁23 分钟前
C++:(4) 内存布局、编译流程、关键字及其链接性
c语言·汇编·jvm·c++
古译汉书44 分钟前
【IoT死磕系列】Day 3:学习HTTP!实战:STM32手写GET请求获取天气实战(附源码+八股文)
数据结构·stm32·物联网·网络协议·学习·算法·http
郝学胜-神的一滴1 小时前
计算思维:数字时代的超级能力
开发语言·数据结构·c++·人工智能·python·算法
m0_531237171 小时前
C语言-数组练习
c语言·开发语言·算法
二年级程序员1 小时前
一篇文章掌握“双向链表”
c语言·数据结构·链表
元亓亓亓1 小时前
考研408--数据结构--day14--B树&B+树&散列表
数据结构·b树·散列表·b+树·408
季明洵1 小时前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法··队列
Non importa2 小时前
二分法:算法新手第三道坎
c语言·c++·笔记·qt·学习·算法·leetcode