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

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

 

 

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

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

还有 链表中 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;
    }
}

 

posted @ 2023-03-13 10:14  Ssshiny  阅读(19)  评论(0)    收藏  举报