面試題17:合并兩個排序的鏈表

題目描述

輸入兩個單調(diào)遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。

代碼實現(xiàn)

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        
        if(list1 == null) return list2;
        if(list2 == null) return list1;
        
        ListNode head = null;
        
        if(list1.val <= list2.val){
            head = list1;
            list1.next = Merge(list1.next,list2);
        }
        else{
            head = list2;
            list2.next = Merge(list1,list2.next);
        }
        
        return head;
    }
}

主要思路

1、首先處理空鏈表,當其中一個為空鏈表時,直接輸出另一個;當兩個均為空鏈表時,輸出null
2、比較 list1 和 list2 的頭結(jié)點,較小的頭結(jié)點作為合并后新鏈表的頭結(jié)點
3、確定新鏈表的頭結(jié)點之后,就可以遞歸比較余下的結(jié)點了

附:非遞歸實現(xiàn)版(長視科技筆試題)

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        
        if(list1 == null) return list2;
        if(list2 == null) return list1;
        
        //創(chuàng)建一個 val 為0的結(jié)點
        ListNode head = new ListNode(0);
        ListNode root = head;
        
        while (list1 != null && list2 != null) {
            if (list1.val < list2.val) {
                head.next = list1;
                list1 = list1.next;
            } else {
                head.next = list2;
                list2 = list2.next;
            }
            head = head.next;
        }
        
        if (list1 != null) {
            head.next = list1;
        }
         
        if (list2 != null) {
            head.next = list2;
        }
 
        return root.next;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 題目:輸入兩個遞增排序的鏈表,合并這兩個鏈表并使新鏈表中的結(jié)點仍然遞增。 解法:鏈表的歸并,根據(jù)示意圖調(diào)整指針指向即可。
    qmss閱讀 163評論 0 0
  • 題目:輸入兩個遞增排序的鏈表,合并這兩個鏈表并使新鏈表中的結(jié)點仍然是按照遞增排序的。
    Felicia1993閱讀 164評論 0 0
  • 轉(zhuǎn)載請注明出處:http://www.lxweimin.com/p/c65d9d753c31 在上一篇博客《數(shù)據(jù)結(jié)構(gòu)...
    Alent閱讀 3,534評論 4 74
  • 大學(xué)的時候不好好學(xué)習(xí),老師在講臺上講課,自己在以為老師看不到的座位看小說,現(xiàn)在用到了老師講的知識,只能自己看書查資...
    和玨貓閱讀 1,475評論 1 3
  • 健身實驗閱讀學(xué)習(xí)實驗娛樂,一個周匆匆忙忙,又結(jié)束了,這種部分課程已經(jīng)結(jié)課而距離期末考試還有那么一段時間的時候,課不...
    bu良青閱讀 286評論 0 1