学完链表,不去找几个经典例题巩固一下知识?链表的五大OJ经典例题,你会吗?不妨来看一看(知识剖析+图形理解)(上)

简介: 学完链表,不去找几个经典例题巩固一下知识?链表的五大OJ经典例题,你会吗?不妨来看一看(知识剖析+图形理解)

前言:Hello!大家好,我是@每天都要敲代码,前两期我们已经学习了链表(单链和双链),没有掌握的同学不妨先去学习一下:单链表和双链表;今天就带大家一起学习一下链表的几个经典例题,巩固一下所学的知识是否能灵活应用!


题目1:翻转链表


image.png


思路一:三个指针翻转===》循环迭代

什么意思呢?就是把指针的方向翻过来;例如:1—>2—>3—>NULL,通过翻转指针我们就会得到NULL<—1<—2<—3,有了简单的思路,下面不妨通过画图分析一波。


逻辑图:

第一步:


200840e5f7424388b7abcd368e9aa3d4.png

第二步:

3a0d023008ab4d279c13d9c22a5d9a1a.png


第三步:  

2119850894d143e7acff863e9ffd7873.png


第四步:  

 d8b5fc8dd2324b348f0a163ae8706e0c.png


具体代码:

根据我们上面的简单分析,我们就可以开始写出核心代码了:


3ab1a59fc8a14c6b913c805e79b3ef89.png

思路二:头插法===》取节点头插到新链表


怎么理解呢?就是取原链表的节点,头插到新链表当中。有了思路,老规矩,我们还是通过画图先分析一波。


逻辑图:

第一步:

bbe80755cb424da380fa40a7c429ad60.png


 

第二步:


d414e094f0b04d65bc3b95598ad85cf3.png


第三步:


4a9a84bb1813424eb613e2486e08ecd7.png


第四步:


09f8032f8eda42b4b416694ecec9e1d8.png


具体代码:


根据我们上面的简单分析,我们就可以开始写出核心代码了:

110bf949adec408b8d35b720e696e12d.png



题目2:链表的中间节点


给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。例如:


6b469ec4847b4929ab27348db2eef119.png


思路: 双指针===》快慢指针


我们不妨定义两个指针:一个慢指针slow,一个快指针fast ,这两个指针的起点是相同的,快指针fast每次都比慢指针slow走快一步。才开始都初始化等于头指针head;slow = head,fast = head;然后每次慢指针走一步:slow = slow->next;快指针走两步:fast = fast->next->next;有了思路我们先画图分析:


逻辑图:


第一种情况:对于偶数个数据


e073e787c0374904a321f96034452968.png

第二种情况:对于奇数个数据


9f268a27909540ca9730c74f8b7900c5.png


具体代码:


根据我们上面的简单分析,我们就可以开始写出核心代码了:

1360e0b6e87d48df9ca91cc6250f139d.png



题目3:合并两个有序链表


将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的

208b98e5a02046eca222d9f4f1e25ce5.png



思路:利用尾插


我们创建一个新的链表,然后把另外两个链表的数据,每次取最小值,依次尾插进来就可以了;下面画图分析一下:


逻辑图:


第一步:

1c9db247100d41aeb0d183eba49ebd27.png



第二步:


1c9db247100d41aeb0d183eba49ebd27.png


第三步:


bfa448c4ff6b4b0b80c4959d3c7c4b9e.png


第四步:

b69023fabeff4f71aa36498757614536.png



第五步:


bce3ff1cdb104b269f46768803ad27eb.png


第六步:

e0c94b7aea6148beb9856a96d6a2a90f.png



第七步:

a5702fb9a75740f8819321a2da6cb258.png



具体代码:


根据我们上面的简单分析,我们就可以开始写出核心代码了:

8a87105262a34bde8feb8f43089822c0.png

相关文章
|
2月前
【数据结构OJ题】环形链表
力扣题目——环形链表
30 3
【数据结构OJ题】环形链表
|
2月前
【数据结构OJ题】复制带随机指针的链表
力扣题目——复制带随机指针的链表
44 1
【数据结构OJ题】复制带随机指针的链表
|
2月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
20 1
【数据结构OJ题】环形链表II
|
2月前
【数据结构OJ题】相交链表
力扣题目——相交链表
24 1
【数据结构OJ题】相交链表
|
2月前
【数据结构OJ题】合并两个有序链表
力扣题目——合并两个有序链表
34 8
【数据结构OJ题】合并两个有序链表
|
2月前
【数据结构OJ题】链表中倒数第k个结点
牛客题目——链表中倒数第k个结点
28 1
【数据结构OJ题】链表中倒数第k个结点
|
2月前
【数据结构OJ题】链表分割
牛客题目——链表分割
22 0
【数据结构OJ题】链表分割
|
2月前
【数据结构OJ题】链表的回文结构
牛客题目——链表的回文结构
27 0
【数据结构OJ题】链表的回文结构
|
2月前
【数据结构OJ题】链表的中间结点
力扣题目——链表的中间结点
19 0
【数据结构OJ题】链表的中间结点
|
2月前
【数据结构OJ题】反转链表
力扣题目——反转链表
18 0
【数据结构OJ题】反转链表