Leetcode 21 合併兩個有序鍊錶

2021-10-06 16:42:46 字數 1647 閱讀 1569

筆者以c++方式解決。

#include

"iostream"

using namespace std;

#include

"algorithm"

#include

"vector"

#include

"queue"

#include

"set"

#include

"map"

#include

"cstring"

#include

"stack"

/** * definition for singly-linked list.

* struct listnode

* };

*/struct listnode };

class solution

if(l2 ==

null

)// 合併兩個鍊錶

dealchen

(l1, l2)

;return headnode;

}/**

* 合併兩個鍊錶,

* 定義 本節點為正在處理的節點

* @param l1

* @param l2

*/void

dealchen

(listnode *l1, listnode *l2)

else

// 定義前置節點,初始時前置節點為空

listnode *prenode =

null

;// 如果兩個鍊錶都有值

while

(l1 !=

null

&& l2 !=

null

)// 進入下乙個迴圈的時候,前置節點就是本節點

prenode = l1;

// 本節點處理完成,更新本節點為下乙個節點,繼續按照上述步驟處理

l1 = l1->next;

}else

// 進入下乙個迴圈的時候,前置節點就是本節點

prenode = l2;

// 本節點處理完成,更新本節點為下乙個節點,繼續按照上述步驟處理

l2 = l2->next;}}

// 如果剩餘的鍊錶沒有處理完成,則直接鏈結到 前置節點後面

// 下面兩個 if 語句最多只有乙個可以執行

if(l1 !=

null)if

(l2 !=

null)}

};intmain()

cout << endl;

system

("pause");

return0;

}

執行結果

有點菜,有時間再優化一下。

難得有時間刷一波leetcode, 這次做乙個系統的記錄,等以後複習的時候可以有章可循,同時也期待各位讀者給出的建議。演算法真的是乙個照妖鏡,原來感覺自己也還行吧,但是演算法分分鐘教你做人。前人栽樹,後人乘涼。在學習演算法的過程中,看了前輩的成果,受益匪淺。

感謝各位前輩的辛勤付出,讓我們少走了很多的彎路!

LeetCode 21合併兩個有序列表

將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4初始解法 這個問題轉換為經典的merge排序中的merge過程.merge排序中merge操作即是將兩個有序子陣列合併成乙個陣列,需要考慮比較過程...

leetcode21 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 思路 每次判斷兩個鍊錶的頭部小的數值,訪問小的,並讓該鍊錶往後移動。注意 注意鍊錶走完,為空的情況即可。遇到的問題 一開始不太理解鍊錶,返回e...

LEETCODE 21 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4c 第一遍將 相等 的這個else分支寫錯了,主要錯誤在於,next指標指向下乙個的這條語句寫到了後面,導致節點自己指向自己,造成了超時錯誤 執...