將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例:輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
解答一:思想與三數之和一樣,還是雙指標
/*** definition for singly-linked list.
*/struct
listnode
listnode(
intx) : val(x), next(nullptr) {}
listnode(
int x, listnode *next) : val(x), next(next) {}
};listnode* mergetwolists(listnode* l1, listnode*l2)
continue
; }
if (l2 ==nullptr)
continue
; }
if (l1->val < l2->val)
else
}return
result;
}
問題:**裡new的太多了,影響速度跟記憶體,檢視解答後**修改如下:
解答二:
listnode* mergetwolists2(listnode* l1, listnode*l2)else
tmp = tmp->next;
}//while結束後,還有乙個隊尾的元素沒有加入
if (l1 ==nullptr)
tmp->next =l2;
if (l2 ==nullptr)
tmp->next =l1;
return result->next;
}
分析:該方法中,結果的next每次都指向已經存在的乙個節點,因此不用new,而且注意返回的結果是result->next而不是result,所有**中只在構造result時new了一次,**優於第乙個解法。
21 合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 原本想的是用19題的結構陣列那種方法來做 分別遍歷兩個鍊錶,建立結構儲存原始索引,val和指標,氣泡排序這個結構,更新索引,按照索引建立新的n...
21 合併兩個有序鍊錶
合併兩個有序鍊錶 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4輸出 1 1 2 3 4 4比較簡單,比較大小,重新排序即可。created by hints on 2019 1 9.include using name...
21 合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4先確定合併鍊錶第乙個節點 在迴圈中同時遍歷兩個鍊錶,將後面其餘節點逐次比較,依大小次序連線到首節點之後,迴圈結束後可能有乙個鍊錶未遍歷完,將這個鍊錶剩...