您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關利用Java怎么合并遞增排序鏈表,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
題目描述
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規則。
解答:
/* 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 list0=null;//定義一個鏈表作為返回值 if(list1.val<list2.val){//判斷此時的值,如果list1比較小,就先把list1賦值給list0,反之亦然 list0=list1; list0.next=Merge(list1.next, list2);//做遞歸,求鏈表的下一跳的值 } else{ list0=list2; list0.next=Merge(list1, list2.next); } return list0; } }
簡化一下,用那個三目運算符:
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; } }
據說這道題面試的時候經常考,因為它跟斐波那契數列問題一樣有遞歸和非遞歸兩種解法,上面說了遞歸的解法,下面再來講下非遞歸的解法:
/* 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,因為下一行馬上就要把它賦值給另一鏈表,得讓它在內存里有位置才行 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; } } //其中一個鏈表已經跑到頭之后,繼續單鏈表的合并 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; } }
上述就是小編為大家分享的利用Java怎么合并遞增排序鏈表了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。