【每日算法】合并兩個排序的鏈表

題目描述

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

示例:輸入{1,3,5},{2,4,6}返回值{1,2,3,4,5,6}

描述

這是一篇針對初學者的題解,共用2種方法解決。

知識點:單鏈表,遞歸

難度:一星

題解:

題目要求:給兩個非遞減單鏈表l1, l2,合并為一個非遞減的單鏈表。

方法一:迭代版本求解

初始化:定義cur指向新鏈表的頭結點

操作:

如果l1指向的結點值小于等于l2指向的結點值,則將l1指向的結點值鏈接到cur的next指針,然后l1指向下一個結點值

否則,讓l2指向下一個結點值

循環(huán)步驟1,2,直到l1或者l2為nullptr

將l1或者l2剩下的部分鏈接到cur的后面

技巧

一般創(chuàng)建單鏈表,都會設一個虛擬頭結點,也叫哨兵,因為這樣每一個結點都有一個前驅結點。

時間復雜度:O(m+n),m,n分別為兩個單鏈表的長度

空間復雜度:O(1)

方法二:遞歸版本

方法一的迭代版本,很好理解,代碼也好寫。但是有必要介紹一下遞歸版本,可以練習遞歸代碼。

寫遞歸代碼,最重要的要明白遞歸函數的功能??梢圆槐仃P心遞歸函數的具體實現(xiàn)。

比如這個ListNode* Merge(ListNode* pHead1, ListNode* pHead2)

函數功能:合并兩個單鏈表,返回兩個單鏈表頭結點值小的那個節(jié)點。

如果知道了這個函數功能,那么接下來需要考慮2個問題:

遞歸函數結束的條件是什么?

遞歸函數一定是縮小遞歸區(qū)間的,那么下一步的遞歸區(qū)間是什么?

對于問題1.對于鏈表就是,如果為空,返回什么

對于問題2,跟迭代方法中的一樣,如果PHead1的所指節(jié)點值小于等于pHead2所指的結點值,那么phead1后續(xù)節(jié)點和pHead節(jié)點繼續(xù)遞歸

時間復雜度:O(m+n)

空間復雜度:O(m+n),每一次遞歸,遞歸棧都會保存一個變量,最差情況會保存(m+n)個變量

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 題目:將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。 示例: 輸...
    SaltyFishDmer閱讀 290評論 0 0
  • 將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。 示例:輸入:1-...
    Jachin111閱讀 150評論 0 0
  • 將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。 https://...
    Shimmer_閱讀 246評論 0 1
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,832評論 28 54
  • 人工智能是什么?什么是人工智能?人工智能是未來發(fā)展的必然趨勢嗎?以后人工智能技術真的能達到電影里機器人的智能水平嗎...
    ZLLZ閱讀 4,098評論 0 5

友情鏈接更多精彩內容