2025年c++单向链表的创建(c++定义一个单链表)

c++单向链表的创建(c++定义一个单链表)反转一个单链表 示例 反转从位置 到 的链表 请使用一趟扫描完成反转 说明 示例 输入 输出 用善意题目迭代的方法 但要注意分两种情况讨论 1 时 需要改动头指针 2 时 无需改动头指针 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 示例 输入 输出

大家好,我是讯享网,很高兴认识大家。



反转一个单链表。

示例:

LeetCode 有关链表的算法题目(C++)_链表
讯享网

LeetCode 有关链表的算法题目(C++)_链表_02

反转从位置​​​ 到​​ 的链表。请使用一趟扫描完成反转。

示例:

输入: ​​​ 输出:​​

用善意题目迭代的方法,但要注意分两种情况讨论:(1)​​​时,需要改动头指针;(2)​​时,无需改动头指针。

LeetCode 有关链表的算法题目(C++)_链表_03

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

示例:

输入:​​​ 输出:​​

  • 链表的兼并是老生常谈的问题,却总是费时间完成。对于不带头结点的链表来说,需要建立一个伪头结点作为合并链表后的头结点。
  • 考虑其中一个链表为空的情况,直接返回另一个链表。
  • 定义两个动态指针指向两个链表表头,设置​​指针作为尾插法的尾指针。
  • 比较两个动态指针所指向结点值的大小,较小的值是待插入结点,方法就是尾插法。

LeetCode 有关链表的算法题目(C++)_结点_04

LeetCode 有关链表的算法题目(C++)_结点_05

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 ​​​来表示链表尾连接到链表中的位置(索引从​​​ 开始)。 如果​​​ 是​​,则在该链表中没有环。

示例 1:

LeetCode 有关链表的算法题目(C++)_代码实现_06

LeetCode 有关链表的算法题目(C++)_结点_07

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 ​​。

为了表示给定链表中的环,我们使用整数 ​​​ 来表示链表尾连接到链表中的位置(索引从 ​​​开始)。 如果 ​​​ 是 ​​,则在该链表中没有环。

说明:不允许修改给定的链表。

示例 1:

LeetCode 有关链表的算法题目(C++)_代码实现_06

LeetCode 有关链表的算法题目(C++)_代码实现_09

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

示例 2:

LeetCode 有关链表的算法题目(C++)_结点_10

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

示例 2:

  • 头结点有可能发生改变,所以新建一伪头结点,方便头结点的删除操作。
  • 如果重复的数字在链表结尾,for循环结束后,需要在此判断一下。

LeetCode 有关链表的算法题目(C++)_链表_11

实现一种算法,找出单向链表中倒数第 ​​个节点。返回该节点的值。

注意:本题相对原题稍作改动

示例:

说明:

  • 两种方法:
  • (1)快慢指针。让快慢指针分别指向头结点后,快指针向前移动​​​个结点,这样快慢指针就拉开​​​个结点的距离,待快指针指向​​​后,慢指针自然指向倒数第​​个结点。
  • (2)引入额外空间,用容器存储结点值,返回倒数第​​个结点值即可。

LeetCode 有关链表的算法题目(C++)_代码实现_12

LeetCode 有关链表的算法题目(C++)_代码实现_13

在​​时间复杂度和常数级空间复杂度下,对链表进行排序。

示例 1:

示例 2:

  • 使用容器。
  • 归并排序。

LeetCode 有关链表的算法题目(C++)_代码实现_14

LeetCode 有关链表的算法题目(C++)_链表_15

LeetCode 有关链表的算法题目(C++)_结点_16

插入排序算法:

插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。

示例 1:

示例 2:

  • 链表中,遇到需要在头指针前面插入数据的情况,可以添加一个伪头指针​​​,方便对头结点的更新,最后返回​​即可。
  • 算法思路就是直接插入排序。

LeetCode 有关链表的算法题目(C++)_链表_17

合并​​个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

  • 定义一个归并两个链表的算法。再次求解容器中所有链表的归并。

LeetCode 有关链表的算法题目(C++)_结点_18

LeetCode 有关链表的算法题目(C++)_代码实现_19

LeetCode 有关链表的算法题目(C++)_代码实现_20

维护当前每个链表没有被合并的元素的最前面一个,​​​个链表就最多有 ​​​ 个满足这样条件的元素,每次在这些元素里面选取​​属性最小的元素合并到答案中。在选取最小元素的时候,我们可以用优先队列来优化这个过程。

LeetCode 有关链表的算法题目(C++)_结点_21

小讯
上一篇 2025-04-17 09:04
下一篇 2025-05-15 13:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/165936.html