当前位置: 首页 > news >正文

学习数据结构(6)单链表OJ上

1.移除链表元素

解法一:(我的做法)在遍历的同时移除,代码写法比较复杂

解法二:创建新的链表,遍历原链表,将非val的节点尾插到新链表,注意,如果原链表结尾是val节点需要将新链表的尾节点的next置为NULL;

我的写法:

参考写法:(更简洁的写法)

2.反转链表

解法一:(我的思路)

将前三个节点地址分别储存在head,secondnode,thirdnode中,当thirdnode不为NULL时,对链表遍历,每次遍历将secondnode指向head,再将head,secondnode,thirdnode分别向后移动一个节点,最后返回secondnode,并将原链表头节点的指向改为NULL

解法二:创建一个新链表,遍历原链表,将节点依次头插到新链表中

解法三:(参考代码)和解法一类似,但对起始的三个相邻节点的选择不同,且更加简洁

 或  

3.链表的中间节点

解法一:(我的解法)遍历链表,得到节点个数,节点个数除以二,得到从头节点到中间节点的遍历次数,再遍历链表,找到中间节点,但较复杂

解法二:(快慢指针)创建两个指针,遍历链表,快指针每次移动两个节点,慢指针每次移动一个节点,由于节点个数分奇偶,所以分两种情况(如下图),pfast->next为NULL或pfast为NULL即为终点,此时pslow所在节点即为中间节点,这种算法效率更高,也容易实现,代码简洁

我的写法:

参考代码(更加简洁):

4.合并两个有序链表

解法一:创建新的空链表,在两个指针都不为NULL的条件下,两个指针分别同时遍历两个链表,每次遍历比较节点中数据的大小,小的数据节点尾插到新链表中,退出循环后,将不为空的链表指针以后的所有节点尾插到新链表中,但这种方法由于新链表为空链表,在插入第一个节点时与插入后面的节点写法不同,造成代码比较冗杂

解法二:创建非空链表,节点尾插到非空链表上,最后释放申请的空间


http://www.mrgr.cn/news/89956.html

相关文章:

  • 免费电影电视剧网站整理
  • UE学习日志#24 C++笔记#10 内存管理1
  • 收集的面试资料
  • 什么是Prompt工程?
  • 如何在RTACAR中配置IP多播(IP Multicast)
  • Vue el-tree 加载过滤出的父节点以及其包含的子节点
  • redis之GEO 模块
  • mysql8 从C++源码角度看sql生成抽象语法树
  • 2025年日祭
  • unity学习29:摄像机camera相关skybox 和 Render Texture测试效果
  • 【LeetCode 刷题】贪心算法(2)-进阶
  • 第 26 场 蓝桥入门赛
  • Java中的继承及相关概念
  • .NET Core 8 Blazor 和 Vue 3 技术构建网
  • 微信小程序案例2——天气微信小程序(学会绑定数据)
  • Vite+TS项目中配置路径别名
  • OC-Block
  • 构建Ubuntu unminimized的docker镜像
  • 【前端】打造自己的hexo博客_hexo一本通
  • 使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8
  • Vite 打包原理
  • 【11天从零基础入门flask】第 6 章:模板优化
  • 激活函数篇 03 —— ReLU、LeakyReLU、ELU
  • 程序员也可以这样赚钱
  • Vite 为什么快,是怎么打包的
  • sqli-lab靶场学习(五)——Less15-17(post方法盲注、修改密码)