zoukankan      html  css  js  c++  java
  • 关于两个链表联合与递归方法

    描述

    首先看链表结构:

    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;
        }
    }
    

    这就是差距。。。

  • 相关阅读:
    (JS/JQ)与Ajax
    JS与JQ的DOM处理
    正则表达式
    JS事件大全
    CSS(初级)学习笔记
    HTML学习笔记
    leetcode记录——65. 有效数字
    dp专题
    Hackerrank---A stones game
    组合博弈问题
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7931712.html
Copyright © 2011-2022 走看看