21 合併兩個有序鍊錶

2022-06-09 20:12:08 字數 1037 閱讀 9846

將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。 

示例:輸入: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先確定合併鍊錶第乙個節點 在迴圈中同時遍歷兩個鍊錶,將後面其餘節點逐次比較,依大小次序連線到首節點之後,迴圈結束後可能有乙個鍊錶未遍歷完,將這個鍊錶剩...