《劍指Offer》16 合併兩個排序的鍊錶

2021-09-10 23:12:27 字數 869 閱讀 8938

題目:16. 合併兩個排序的鍊錶

知識點:魯棒性

題目描述:

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

解題思路:

解法一:使用迴圈實現,即首先排除特殊情況(兩個鍊錶同時為空,或其中之一為空),其次同時對兩個鍊錶進行遍歷,將值較小的結點接到輸出鍊錶末尾即可。

解法二:使用遞迴實現,當我們得到兩個鍊錶中值較小的頭結點並把它鏈結到已經合併的鍊錶之後,兩個鍊錶剩餘的結點依然是排序的,因此合併的步驟和之前的步驟是一樣的,而這就是典型的遞迴過程,所以直接按照這個思路寫**就可以了。

**:

//解法一(自研):

listnode* merge(listnode* phead1, listnode*phead2)

else

while(p1 != nullptr && p2 != nullptr)else

p = p->next;

}if(p2 != nullptr) p->next = p2;

else if(p1 != nullptr) p->next = p1;

return phead1->val < phead2->val ? phead1 : phead2;

}//解法二(劍指offer 遞迴實現):

listnode* merge(listnode* phead1, listnode* phead2)

else

return pmergedhead;

}

劍指offer 16 合併兩個排序的鍊錶

題目 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 先對兩個鍊錶用容器進行 然後在容器中對容器內的元素進行排序,最後進行合成鍊錶。struct listnode class solution while phead2 null sort vec.b...

劍指offer 16 合併兩個排序的鍊錶

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。時間限制 1秒 空間限制 32768k 熱度指數 366049 本題知識點 鍊錶 新建乙個鍊錶,然後兩個煉表頭元素比較,取較小值加入到鍊錶中 做這道題做了很久,雖然很簡單,但總報錯說死迴圈,後來發現原來是指標...

劍指Offer 16 合併兩個排序的鍊錶

之前pta做過類似的題目,當時那道題應該是每次新建乙個節點 這次利用的原本存在的節點構成了合併後的鍊錶。幾點注意 1 空的頭節點最後要刪去,用delete刪去 2 構造空的頭節點時,要傳遞建構函式 constructor 要求的引數,一開始沒有加引數,報錯,加引數之後通過執行。struct list...