劍指offer面試17 合併兩個排序的連結串列
一、題目
輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
二、分析
- 如果連結串列1為空,將輸出連結串列2;
- 如果連結串列2為空,將輸出連結串列1;
- 如果連結串列1和連結串列2都不為空,則比較指向連結串列1和連結串列2的節點值,如果指標1的節點值小於指標2的節點值,則將輸出連結串列的指標指向指標1;反之則將輸出連結串列的指標指向指標2;
- 當連結串列1再次為空時,將輸出連結串列指向指標2;
- 當連結串列2再次為空時,將輸出連結串列指向指標1;
三、程式碼實現
/*
* 題目:
* 輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
*/
public class Test17 {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
ListNode head = null;
//確定輸出連結串列的頭結點
if(list1.value < list2.value){
head = list1;
list1 = list1.next;
}else{
head = list2;
list2 = list2.next;
}
ListNode temp = head;
while(list1 != null && list2 != null){
if(list1.value < list2.value){
temp.next = list1;
temp = temp.next;
list1 = list1.next;
}else{
temp.next = list2;
temp = temp.next;
list2 = list2.next;
}
}
if(list1 == null){
temp.next = list2;
}
if(list2 == null){
temp.next = list1;
}
return head;
}
}
四、遞迴實現
//遞迴實現
public ListNode Merge2(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
ListNode head = null;
if(list1.value < list2.value){
head = list1;
head.next = Merge2(list1.next, list2);
}else{
head = list2;
head.next = Merge2(list1, list2.next);
}
return head;
}
public void display(ListNode head){
if(head == null){
return;
}
ListNode temp = head;
while(temp != null){
System.out.print(temp.value+",");
temp = temp.next;
}
}
相關文章
- 劍指 Offer 25. 合併兩個排序的連結串列 JavaScript實現排序JavaScript
- 劍指offer面試16 反轉連結串列面試
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- 劍指offer——兩個連結串列的第一個公共結點C++C++
- 合併K個排序連結串列排序
- 劍指offer面試題15 連結串列中倒數第K個結點面試題
- JZ-016-合併兩個排序的連結串列排序
- PHPer也刷《劍指Offer》之連結串列PHP
- [每日一題] 第十八題:合併兩個排序的連結串列每日一題排序
- 【LeetCode】【連結串列】劍指 Offer 52. 兩個連結串列的第一個公共節點 思路解析和程式碼LeetCode
- 劍指Offer面試題5(Java版):從尾到頭列印連結串列面試題Java
- 《劍指offer》:[37]如何得到連結串列環的入口地址
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 劍指offer-17:樹的子結構
- 劍指offer-從尾到頭列印連結串列-phpPHP
- 淺談歸併排序:合併 K 個升序連結串列的歸併解法排序
- 有a,b兩個已按學號升序排序的連結串列,每個連結串列中的結點包括學號、成績。要求把兩個連結串列合併,仍按學號升序排列。...排序
- leetcode:21. 合併兩個有序連結串列(連結串列,簡單)LeetCode
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- leetcode23. 合併K個排序連結串列LeetCode排序
- LeetCode 23. 合併K個排序連結串列LeetCode排序
- 劍指offer面試18 樹的子結構面試
- 連結串列歸併排序排序
- 連結串列合併-排序-logo列印參考排序Go
- 【劍指offer】字串的組合字串
- 【演算法-java實現】合併兩個有序連結串列演算法Java
- leetcode雙週賽(2)-合併兩個連結串列LeetCode
- 每日leetcode——21. 合併兩個有序連結串列LeetCode
- 牛客網高頻演算法題系列-BM4-合併兩個排序的連結串列演算法排序
- Leetcode 21 合併兩個有序連結串列 學習感悟LeetCode
- 實戰資料結構(3)_兩個單連結串列間的合併操作資料結構
- 反轉連結串列、合併連結串列、樹的子結構
- 【劍指offer】員工年齡排序排序
- 【劍指offer】兩個棧實現一個佇列佇列
- 【劍指offer】兩個佇列實現一個棧佇列
- 演算法:排序連結串列:歸併排序演算法排序
- 連結串列面試題(十三)---求兩個都不帶環的連結串列相交的結點面試題
- 02-線性結構1 兩個有序連結串列序列的合併 (15分)