劍指Offer 面試題17 合併兩個有序鍊錶

2021-08-04 10:11:29 字數 741 閱讀 9181

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

分析:這道題有點類似於面試題4_替換空格中的擴充套件題目:兩個有序陣列合併。大體思路上是一致的,**很類似,分別遍歷兩個鍊錶,將小的結點鏈結到新煉表表尾。後期處理有點區別就是,合併陣列在迴圈結束後,需要用while把剩餘的乙個陣列中的元素一次加入新陣列。而本題只需要用if判斷哪個鍊錶不空然後把剩下的直接鏈結到新鍊錶即可,這是鍊錶不同於順序表的地方,儲存方式不同。

/*

struct listnode

};*/

class solution

else

p = head; //新鍊錶的指標

while(p1 && p2)

else

p = p->next;

}//這裡跟合併陣列不一樣,陣列用while

if(p1 != null)

else

p->next = p2;

return head;

}};

用遞迴思想來解決問題會很容易,因為每加入乙個結點,剩下的又相當於執行一次合併操作,注意終止條件。簡潔遞迴:

/*

struct listnode

};*/

class solution

else

return mergehead;

}};

劍指offer 面試題17

題目 合併兩個排序的單向鍊錶 自己所寫 如下 listnode mergesortedlists listnode phead1,listnode phead2 listnode mergetwolist listnode pfirst,listnode psecond if phead pnext...

劍指offer 面試題17 合併兩個排序的鍊錶

題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。思路 每次從兩個鍊錶中選取較小的結點作為新鍊錶的結點,那麼這裡有兩種方法,迴圈或者遞迴。1 迴圈,每次取出兩個鍊錶中較小的結點插入新鍊錶,到達其中乙個鍊錶的尾結點時,另外乙個鍊錶的其餘部分直接接在這個尾結點上。2 從...

劍指offer之面試題17 合併兩個排序的鍊錶

題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 養成好習慣,一旦有鍊錶作為形參傳遞,都要對鍊錶是否為空做判斷,防止空指標異常,至於怎麼處理,稍後會講。當鍊表都不為空時,比較兩個鍊錶的頭結點值的大小,較小者作為新的頭結點儲存,不妨設較小的頭結...