將兩個有序鏈表合併爲一個新的有序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
兩個有序鏈表的排序,實際上可以看成一個單鏈表使用歸併排序的最後一個環節:“將兩個排好序的子序列合併爲一個子序列:每次都是從未比較的兩個子序列的最小值中選出一個更小值”。
遍歷實現
package 劍指offer.合併兩個排序的鏈表_25;/*
作者 :XiangLin
創建時間 :16/06/2020 17:12
文件 :Solution.java
IDE :IntelliJ IDEA
*/
public class Solution {
public static class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
}
public ListNode mergeTowLists(ListNode L1,ListNode L2){
ListNode temp = new ListNode(0);
ListNode head = temp;//保留頭節點的引用
while (L1 != null && L2 != null){
if (L1.val < L2.val){
temp.next = L1;
L1 = L1.next;
}else {
temp.next = L2;
L2 = L2.next;
}
temp = temp.next;
}
if (L1 == null) temp.next = L2;//l1子序列爲空,則直接拼屆l2
if (L2 == null) temp.next = L1;
return head.next;//返回頭節點指向的序列
}
}
遞歸實現
package 劍指offer.合併兩個排序的鏈表_25;/*
作者 :XiangLin
創建時間 :16/06/2020 17:33
文件 :Solution1.java
IDE :IntelliJ IDEA
*/
public class Solution1 {
public static class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
}
public ListNode merger(ListNode L1,ListNode L2){
if (L1 == null){
return L2;
}
if (L2 == null){
return L1;
}
if (L1.val <= L2.val){
L1.next = merger(L1.next,L2);
return L1;
}else {
L2.next = merger(L2.next,L1);
return L2;
}
}
}
另外博主收藏這些年來看過或者聽過的一些不錯的常用的上千本書籍,沒準你想找的書就在這裏呢,包含了互聯網行業大多數書籍和麪試經驗題目等等。有人工智能系列(常用深度學習框架TensorFlow、pytorch、keras。NLP、機器學習,深度學習等等),大數據系列(Spark,Hadoop,Scala,kafka等),程序員必修系列(C、C++、java、數據結構、linux,設計模式、數據庫等等)以下是部分截圖
更多文章見本原創微信公衆號「五角錢的程序員」,我們一起成長,一起學習。一直純真着,善良着,溫情地熱愛生活。關注回覆【電子書】即可領取哦。
給大家推薦一個Github,上面非常非常多的乾貨:https://github.com/XiangLinPro/IT_book