当前位置: 首页 > 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/89895.html

相关文章:

  • 机器学习中常用的评价指标
  • Vue(4)
  • springboot配置https
  • 开放式TCP/IP通信
  • webpack系统学习
  • 【Linux网络编程】之守护进程
  • ASP.NET Core对JWT的封装
  • 基于 SpringBoot3 的 SpringSecurity6 + OAuth2 自定义框架模板
  • MYSQL索引与视图
  • vue2+vue3 HMCXY基础入门
  • 零基础学习书生.浦语大模型--基础岛
  • TCN时间卷积神经网络多变量多步光伏功率预测(Matlab)
  • Ubuntu20.04 本地部署 DeepSeek-R1 及 chatbox可视化
  • C++到C#核心语法对照指南
  • Java并发编程笔记
  • 【抽象代数】1.1. 运算及关系
  • 【DeepSeek论文精读】3. DeepSeekMoE:迈向混合专家语言模型的终极专业化
  • python实现--平衡二叉树和红黑树
  • 大数据数仓实战项目(离线数仓+实时数仓)3
  • vscode卡住---回退版本解决