【劍指offer】面試題25-合併兩個排序的鏈表

題目

輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。

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;
    }
}

蘇州大學計算機考研依然考過這個題,手寫代碼實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章