題目
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
1.思路
(1)創建一個新鏈表newlist,尾插法不斷將原來的兩個鏈表的結點拼接到其尾部。
(2)當兩個鏈表均不空,同時遍歷兩個鏈表,進行元素大小判斷,摘下元素值較小的結點尾插到newlist,同時指針後移繼續比較。
(3)循環跳出的時候有三種情況
①兩個鏈表都到頭了,不需要繼續處理;
②list1沒到頭,newlist.next直接指向list1的剩餘結點就好,因爲原本就是有序單調遞增的;
③list2沒到頭,newlist.next直接指向list2的剩餘結點就好。
(4)返回新的合併後的單調遞增的鏈表
2.代碼(Java實現)
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode newlist = new ListNode(10086);
ListNode newindex = newlist;
ListNode index1 = list1;
ListNode index2 = list2;
// 兩個鏈表均不空
while(list1 != null && list2 != null) {
if(list1.val < list2.val) {
// list1 比 list2 的元素值小
index1 = index1.next;
list1.next = newindex.next;
newindex.next = list1;
newindex = newindex.next;
list1 = index1;
}else {
// list2 比 list1 的元素值小
index2 = index2.next;
list2.next = newindex.next;
newindex.next = list2;
newindex = newindex.next;
list2 = index2;
}
}
if(list1 != null) {
// list1不空
newindex.next = list1;
}else {
// list2不空
newindex.next = list2;
}
return newlist.next;
}
}
蘇州大學計算機考研依然考過這個題,手寫代碼實現。