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)專題,如有不足之處,歡迎留言指出,希望對大家有所幫助。感謝朋友們對本站的支持!
上一篇:歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)
欄 目:Java編程
本文標(biāo)題:Java編程實(shí)現(xiàn)遞增排序鏈表的合并
本文地址:http://www.jygsgssxh.com/a1/Javabiancheng/8462.html
您可能感興趣的文章
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進(jìn)階:Struts多模塊的技巧
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
- 01-10Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)器
- 01-10Java中的浮點(diǎn)數(shù)分析
- 01-10面向?qū)ο缶幊?Java中的抽象數(shù)據(jù)類型


閱讀排行
本欄相關(guān)
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進(jìn)階:Struts多模塊的技巧
- 01-10J2SE 1.5版本的新特性一覽
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)
- 01-10Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常
隨機(jī)閱讀
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?


