筆者以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指標指向下乙個的這條語句寫到了後面,導致節點自己指向自己,造成了超時錯誤 執...