Java編程實(shí)現(xiàn)遞增排序鏈表的合并
題目描述
輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。
解答:
/* 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; //判斷到某個(gè)鏈表為空就返回另一個(gè)鏈表。如果兩個(gè)鏈表都為空呢?沒關(guān)系,這時(shí)候隨便返回哪個(gè)鏈表,不也是空的嗎? if(list2==null)return list1; ListNode list0=null;//定義一個(gè)鏈表作為返回值 if(list1.val<list2.val){//判斷此時(shí)的值,如果list1比較小,就先把list1賦值給list0,反之亦然 list0=list1; list0.next=Merge(list1.next, list2);//做遞歸,求鏈表的下一跳的值 } else{ list0=list2; list0.next=Merge(list1, list2.next); } return list0; } }
簡化一下,用那個(gè)三目運(yùn)算符:
public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null) return list2; if(list2==null) return list1; ListNode head; list0= list1.val>list2.val?list2:list1; list0.next = list1.val>list2.val?Merge(list1,list2.next):Merge(list1.next,list2); return list0; } }
據(jù)說這道題面試的時(shí)候經(jīng)???,因?yàn)樗巢瞧鯏?shù)列問題一樣有遞歸和非遞歸兩種解法,上面說了遞歸的解法,下面再來講下非遞歸的解法:
/* 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 tmp1 = list1; ListNode tmp2 = list2; ListNode head = new ListNode(0); //這里不能把返回鏈表賦值為null,因?yàn)橄乱恍旭R上就要把它賦值給另一鏈表,得讓它在內(nèi)存里有位置才行 ListNode headptr = head; while(tmp1 != null && tmp2!=null){ if(tmp1.val <= tmp2.val) { head.next=tmp1; head = head.next; tmp1 = tmp1.next; } else{ head.next=tmp2; head = head.next; tmp2=tmp2.next; } } //其中一個(gè)鏈表已經(jīng)跑到頭之后,繼續(xù)單鏈表的合并 while(tmp1 != null){ head.next = tmp1; head = head.next; tmp1= tmp1.next; } while(tmp2 != null){ head.next = tmp2; head = head.next; tmp2= tmp2.next; } head = headptr.next; return head; } }
總結(jié)
以上就是本文關(guān)于Java編程實(shí)現(xiàn)遞增排序鏈表的合并的全部內(nèi)容,感興趣的朋友可以參閱:Java編程實(shí)現(xiàn)從尾到頭打印鏈表代碼實(shí)例、Java編程刪除鏈表中重復(fù)的節(jié)點(diǎn)問題解決思路及源碼分享、Java輸出鏈表倒數(shù)第k個(gè)節(jié)點(diǎn)以及本站其他相關(guān)專題,如有不足之處,歡迎留言指出,希望對(duì)大家有所幫助。感謝朋友們對(duì)本站的支持!
相關(guān)文章
idea導(dǎo)入項(xiàng)目不顯示maven側(cè)邊欄的問題及解決方法
這篇文章主要介紹了idea導(dǎo)入項(xiàng)目不顯示maven側(cè)邊欄的問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07使用SpringBoot AOP 記錄操作日志、異常日志的過程
這篇文章主要介紹了使用SpringBoot AOP 記錄操作日志、異常日志的過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05讓Java程序自動(dòng)重啟的實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)硪黄孞ava程序自動(dòng)重啟的實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行
這篇文章主要介紹了Springboot jar文件如何打包zip在linux環(huán)境運(yùn)行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02SpringBoot+Redis實(shí)現(xiàn)分布式緩存的方法步驟
在高并發(fā)的分布式的系統(tǒng)中,緩存是提升系統(tǒng)性能的重要手段,本文主要介紹了SpringBoot+Redis實(shí)現(xiàn)分布式緩存的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07Java Map 按key排序和按Value排序的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狫ava Map 按key排序和按Value排序的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08