【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表

这篇具有很好参考价值的文章主要介绍了【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LeetCode:【链表相关】合并两个有序链表

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

题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表,链表,leetcode,java
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

代码实现

此题没啥好说的,直接上代码,自己好好分析一下子

/**
 * 题目:合并两个有序链表
 * 输入:l1 = [1,2,4], l2 = [1,3,4]
 * 输出:[1,1,2,3,4,4]
 */
public class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //注意:头节点存储的是-1,并且移动指针p指向头节点,头节点的next指针指向的才是合并后的第一个元素(****)
        ListNode result = new ListNode(-1);
        ListNode p = result;

        while (list1 != null && list2 != null) {
            if (list1.val <= list2.val) {
                p.next = list1;
                p = p.next;
                list1 = list1.next;
            } else {
                p.next = list2;
                p = p.next;
                list2 = list2.next;
            }
        }

        if (list1 == null) {
            p.next = list2;
        }
        if (list2 == null) {
            p.next = list1;
        }

        return result.next;
    }
}

题目2:反转链表

题目描述:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表,链表,leetcode,java

分析

此题可以使用 头插法 实现

  • 使用栈实现(注意封尾操作)

  • 使用头插法(注意:头插法的第一步是记录head的next节点即 temp = head.next;)文章来源地址https://www.toymoban.com/news/detail-650970.html

代码实现

/**
 * 题目:反转链表
 * 输入:head = [1,2,3,4,5]
 * 输出:[5,4,3,2,1]
 */
public class Solution {
    //方法1:使用栈Stack实现
    public ListNode reverseList(ListNode head) {
        Stack<ListNode> stack = new Stack<>();
        ListNode newHead = new ListNode(-1);
        ListNode p = newHead;

        while (head != null) {
            stack.push(head);
            head = head.next;
        }

        while (!stack.isEmpty()) {
            p.next = stack.pop();
            p = p.next;
        }

        //注意:最后一定要将链表结束进行封尾操作,不然会报错(***)
        p.next = null;

        return newHead.next;
    }

    //方法2:使用头插法(头插法的关键第一步,记录head后面的节点即temp = head.next)
    public ListNode reverseList1(ListNode head) {
        ListNode newHead = null;

        while (head != null) {
            //1、首先,记录head后面的节点
            ListNode temp = head.next;

            //2、头插法:(1)先将head.next指向newHead (2)将newhead直接赋值为head的这样就实现了头插法
            head.next = newHead;
            newHead = head;

            //3、将head赋值为head后面的节点temp继续遍历
            head = temp;
        }
        //4、最后,返回newHead
        return newHead;
    }
}

到了这里,关于【刷题笔记8.15】【链表相关】LeetCode:合并两个有序链表、反转链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Leetcode 21. 合并两个有序链表

    题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/description/ 两个链表都是升序链表,新建一个链表,引入伪头节点作为辅助节点,将各节点添加到伪节点之后,再用一个cur节点指向新链表的末尾 遍历两个链表,对比每个节点值,将更小的链表节点加入到新链表中 如果其中一

    2024年02月13日
    浏览(32)
  • LeetCode 21.合并两个有序链表

    题目链接 👉 LeetCode 21.合并两个有序链表👈 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 取小的进行尾插 👇 图解 👇 取小的进行尾插 👇 图解 👇 🥰 希望烙铁们能够理解欧! 总结🥰 以上就是本题讲解的全部内

    2024年02月13日
    浏览(37)
  • LeetCode21.合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 : 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 创建一个新的链表头节点(dummyNode)和一个指针current,用于表示当前节点。 在一个while循环中,比较两个链表的节

    2024年02月20日
    浏览(32)
  • Leetcode-每日一题【1669.合并两个链表】

    给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。 请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。 下图中蓝色边和节点展示了操作后的结果:   请你返回结果链表的头指针。 示例 1: 输入: list1 = [0,1,2,3,4,5], a = 3, b

    2024年02月13日
    浏览(38)
  • Leetcode算法递归类—合并两个有序链表

    目录 21. 合并两个有序链表 题解: 代码: 将两个升序链表合并为一个新的  升序  链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例 1: 示例 2: 示例 3: 提示: 两个链表的节点数目范围是  [0, 50] -100 = Node.val = 100 l1  和  l2  均按  非递减顺序  

    2024年02月13日
    浏览(29)
  • (链表) 剑指 Offer 25. 合并两个排序的链表 ——【Leetcode每日一题】

    难度:简单 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1-2-4, 1-3-4 输出:1-1-2-3-4-4 限制 : 0 = 链表长度 = 1000 注意:本题与 21. 合并两个有序链表 相同 💡思路: 法一:递归 将该问题可以分解成子链表,只比较当前 l1 链

    2024年02月15日
    浏览(32)
  • LeetCode150道面试经典题-- 合并两个有序链表(简单)

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]    示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3:   输入:l1 = [], l2 = [0] 输出:[0] 递归调用 将这个问题不断拆分

    2024年02月12日
    浏览(30)
  • LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表

    54. 螺旋矩阵 https://leetcode.cn/problems/spiral-matrix/ 题目要求:  思路:一定要 先找好边界 。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可以确定四个边界所包含的值。然后再 循环一层一层往里进入 ,比如添加完上边界1234后,上边界就需要+1,

    2024年02月12日
    浏览(35)
  • 【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】

    题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1, 2, 4], l2 = [1, 3, 4] 输出:[1, 1, 2, 3, 4, 4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 我们的思路是,先定义

    2023年04月24日
    浏览(34)
  • C语言 | Leetcode C语言题解之第21题合并两个有序链表

    题目: 题解:

    2024年04月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包