合并两个有序链表,剑指offer,力扣

目录

力扣题目地址:

原题题目:

我们直接看题解吧:

解题方法:

审题目+事例+提示:

解题思路:

具体流程如下:

代码实现:

知识补充:


力扣题目地址:

21. 合并两个有序链表 - 力扣(LeetCode)

难度:简单

今天刷合并两个有序链表,大家有兴趣可以点上看看题目要求,试着做一下

原题题目:

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

我们直接看题解吧:

解题方法:

方法1、递归

方法2、迭代

审题目+事例+提示:

  • 两个链表的节点数目范围是 [0, 50]
  • l1 和 l2 均按 非递减顺序 排列

解题思路:

设L1,L2两个递增链表,合并成一个新的递增链表L3,

循环遍历依次比较两个链表的每一个节点,

若L1>L2,则L3的next指向L1,L1、L3下移一位,L1与L2继续比较,L2同理。

最后遍历结束,其中一个链表会剩下些节点,则直接加到L3即可

具体流程如下:

合并两个有序链表,剑指offer,力扣_第1张图片

代码实现:

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
      //虚节点的值为 0,它的值可以设置为任何的数,因为我们根本不需要使用它的值
       ListNode dum = new ListNode(0), cur = dum;//创建一个虚头结点,同时cur指向dum
        while (list1 != null && list2 != null) {  //while循环结束条件为其中一个链表指向为空
            if (list1.val < list2.val) {       //当L1
知识补充:

为什么要让cur=dum

链表头节点dum不能乱动,所以用cur暂代dum,让cur动,直接操作dum的话,最后返回就得重找头结点了

类似于浅拷贝后的对象和原对象的修改会相互影响,这本质是因为它们用的同一片内存,相当于一个房间配两把钥匙。但如果不是修改,而是直接赋值,它们是不会相互影响的,相当于换成了新房子的钥匙。 

你可能感兴趣的:(剑指offer,#,链表,链表,leetcode,数据结构)