反转一个单链表。
示例:

反转从位置 到 的链表。请使用一趟扫描完成反转。
示例:
输入: 输出:
用善意题目迭代的方法,但要注意分两种情况讨论:(1)时,需要改动头指针;(2)时,无需改动头指针。

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


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



给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 。
为了表示给定链表中的环,我们使用整数 来表示链表尾连接到链表中的位置(索引从 开始)。 如果 是 ,则在该链表中没有环。
说明:不允许修改给定的链表。
示例 1:


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

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
示例 2:
- 头结点有可能发生改变,所以新建一伪头结点,方便头结点的删除操作。
- 如果重复的数字在链表结尾,for循环结束后,需要在此判断一下。

实现一种算法,找出单向链表中倒数第 个节点。返回该节点的值。
注意:本题相对原题稍作改动
示例:
说明:
- 两种方法:
- (1)快慢指针。让快慢指针分别指向头结点后,快指针向前移动个结点,这样快慢指针就拉开个结点的距离,待快指针指向后,慢指针自然指向倒数第个结点。
- (2)引入额外空间,用容器存储结点值,返回倒数第个结点值即可。



在时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
示例 2:
- 使用容器。
- 归并排序。



插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
示例 1:
示例 2:
- 链表中,遇到需要在头指针前面插入数据的情况,可以添加一个伪头指针,方便对头结点的更新,最后返回即可。
- 算法思路就是直接插入排序。

合并个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
- 定义一个归并两个链表的算法。再次求解容器中所有链表的归并。



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


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