关于两个链表联合与递归方法

描述

首先看链表结构:

public class ListNode {
		int val;
		ListNode next;
		ListNode(int x) { val = x; }
	}

本题目要求把传入两个链表,根据每个元素的val大小,按顺序把两个链表重新组装起来,组装为一个链表。

比如1-3-5-7和2-4-6-8两个链表,组装起来就是1-2-3-4-5-6-7-8

答案描述

先看看我的答案,巨长无比还不好理解,想法是这样的:就是根据两个链表遍历比大小,新建一个新的链表---分别用指针遍历两个链表,对比当前元素,哪个小就把哪个的值传入新联表的新建元素中,然后后移一位。

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1 == null){
            return l2;
        }else if(l2 == null) return l1;
        boolean bool = false;
        ListNode l0 = new ListNode(0);
        ListNode first = l0;
        while(true){
            if(l1.val<l2.val){
                l0.next = new ListNode(l1.val);
                l0 = l0.next;
                if(l1.next == null){ 
                    bool = true;
                    break;
                }
                l1 = l1.next;
            }else{
                l0.next = new ListNode(l2.val);
                l0 = l0.next;
                if(l2.next == null) break;
                l2 = l2.next;
            }
        }
        if(bool){
            while(true){
                l0.next = new ListNode(l2.val);
                l0 = l0.next;
                if(l2.next == null) break;
                l2 = l2.next;
            }
        }else{
            while(true){
                l0.next = new ListNode(l1.val);
                l0 = l0.next;
                if(l1.next == null) break;
                l1 = l1.next;
            }
        }
        return first.next;
    }
}

再看看人家大神的方法,用的是递归,超级好懂,我对我的想法无力吐槽:

public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1 == null){
            return l2;
        }
        if(l2 == null){
            return l1;
        }
        
        ListNode mergeHead;
        if(l1.val < l2.val){
            mergeHead = l1;
            mergeHead.next = mergeTwoLists(l1.next, l2);
        }
        else{
            mergeHead = l2;
            mergeHead.next = mergeTwoLists(l1, l2.next);
        }
        return mergeHead;
    }
}

这就是差距。。。

原文地址:https://www.cnblogs.com/K-artorias/p/7931712.html