- 鏈接 :原題
- 題意 : 兩個有序鏈表進行合併。
- 思路:
這個是經典的數據結構鏈表題,考研的時候在王道里面看到過,是一種經典的歸併思想,也就是迭代。用的是尾插法。
如果兩個鏈表 l1 和 l2都不爲空,那就比較兩個數,較小的插入到 ans 表尾,更新節點,直到其中有一個鏈表爲空。
然後省下來的那個不爲空的再逐漸添加到後面。
- 代碼:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* root = new ListNode;
ListNode* ans = root;
while(l1 != NULL && l2 != NULL){
ListNode* tmp = new ListNode;
if(l1->val <= l2->val){
tmp->val = l1->val;
l1 = l1->next;
}else{
tmp->val = l2->val;
l2 = l2->next;
}
root->next = tmp;
root = tmp;
}
while(l1 != NULL){
root->next = l1;
root = l1;
l1 = l1->next;
}
while(l2 != NULL){
root->next = l2;
root = l2;
l2 = l2->next;
}
if(ans->next != NULL){
return ans->next;
}
return NULL;
}
};
- 遇到的問題:
因爲鏈表問題不怎麼遇到,所以有些陌生。
(1)鏈表節點聲明, ListNode* a = new ListNode;
(2)尾插法, root->next = tmp; root = tmp; 順序別搞錯。