首页 > 其他分享 >力扣简21 合并两个有序链表

力扣简21 合并两个有序链表

时间:2023-03-13 10:22:21浏览次数:38  
标签:力扣 ListNode 21 val list1 list2 链表 next null

递归特别短!没这种思维!

 

 

自己用那种最直白的两个两个相比换指针指向 导致会有空情况等特殊情况出错 

看了题解是用递归什么的 扩展一下这种思路 而且可以采用给链表加一个空头结点来避免特殊情况的判断

还有 链表中 A.next=B 是说将A的next指针指向B 和常用的赋值是不一样的

周五看的题解 周一写的

 

迭代:

class Solution {
    public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode list=new ListNode(-1);
        ListNode temp=list,temp1=list1,temp2=list2;
        while(temp1!=null&&temp2!=null) {
            if(temp1.val<temp2.val) {
                temp.next=temp1;
                temp=temp.next;
                temp1=temp1.next;
            }
            else{
                temp.next=temp2;
                temp=temp.next;
                temp2=temp2.next;
            }
        }
        if(temp1==null) {
            temp.next=temp2;
        }
        if(temp2==null) {
            temp.next=temp1;
        }
        return list.next;
    }
}

 

 

 

 

 

 

我写的烂烂代码

package Leetcode;
class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public class Leetcode21 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ListNode list1=new ListNode(2);
        ListNode list2=new ListNode(1);
        ListNode list=Leetcode21.mergeTwoLists(list1, list2);

    }
    public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode temp=null;
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        if(list1.val>list2.val){
            temp=list2;//temp指向list2
            list2=list1;
            list1=temp;
        }
        ListNode l1=list1,l2=list2,pre=null;
        while(l1!=null||l2!=null) {
            while(l1!=null && l1.val<=l2.val && l2!=null) {//1不空 且1值小于等于2 移动到第一个大于当前 2的位置
                pre=l1;
                l1=l1.next;
            }
            if(l2==null) {
                return list1;
            }
            pre.next=l2;
            if(l1==null) {
                return list1;
            }    
            l2=l2.next;
            pre.next.next=l1;
        }
        return list1;
    }
}

 

标签:力扣,ListNode,21,val,list1,list2,链表,next,null
From: https://www.cnblogs.com/ayuanjiejie/p/17210442.html

相关文章

  • 四种语言刷算法之反转链表 II
    力扣92. 反转链表II1、C/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNo......
  • 今日报告-21
    今日打卡所花时间(包括上课):2h代码量(行):100发表博客:1篇(不包括本篇)了解到的知识点:今天主要学的知识是Service,对其基础知识进行了了解和学习。通过Service,可以实现许多有......
  • 2023-03-12 Java中的链表
    链表LinkedListJDK中有标准库实现:java.util.LinkedList,和java.util.List对比,其实两者都可以看做是动态数组链表的特征线性数据结构——链表是真正的动态数据结构:数......
  • 力扣180(MySQL)-连续出现的数字(中等)
    题目:编写一个SQL查询,查找所有至少连续出现三次的数字。返回的结果表中的数据可以按 任意顺序 排列。查询结果格式如下面的例子所示: 解题思路:原表数据: 方法......
  • 计应212小组讨论junit成果
    JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。它包括以下特性:1、用于测试期望结果的断言(Assertion)2、用于共享共同测试数据的测试工具3、用于方便......
  • GDKOI2021口胡
    因为在广东集训,我们都要参加GDKOI2023来试手。听说GDKOI2021是三天,每天\(4\)小时\(4\)题,省选难度,并且没有大样例。(p.s.GDKOI2022未举办)而且评测机似乎还是g++......
  • 【数据结构入门】带头双向循环链表(List)详解(初始化、增、删、查、改)
    1、链表的种类:总共有8种,以带不带头,单向或者双向,循环或者不循环来组合形成。单向或者双向带头或者不带头循环或者非循环主要学习下面两种链表的功能实现无头单向非循环链表:又......
  • 2021 牛客 OI 赛前集训营-提高组(第二场)
    A.串串串【题目描述】你有两个长度分别为\(n,m\)的\(01\)串\(\text{S,T}\)。有\(\textQ\)次询问,每次询问给出\(l_1,r_1,l_2,r_2\),其中\(r_1−l_1+1......
  • PAT Basic 1021. 个位数统计
    PATBasic1021.个位数统计1.题目描述:给定一个 \(k\) 位整数 \(N=d_{k−1}10^{k−1}+⋯+d_110^1+d_0 (0≤d_i≤9, i=0,⋯,k−1, d_{k−1}>0)\),请编写程序统计每......
  • [省选联考 2021] 解题报告
    这两天(2023-3-12/13)开了一场省选VP,感触比较大,同时也有颇多要总结的地方,因此写下这篇博客。省选\(-20\)多天,我还在补一些没有仔细学的新算法,虽然感觉新学了很多东西,但是......