Leetcode32 合併兩個有序鍊錶

2021-09-24 10:54:37 字數 1187 閱讀 7431

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

示例:

輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

我的思路,這個題目要是不是可以用最簡單的方式解決呢?假設兩個鍊錶的長度相等。那麼遍歷鍊錶l1,然後依次讓l2插入到l1後面。

但是之後發現,題目中有可能是長度不一樣的,那麼我就更改為如果l2比l1長,那麼就從l1插入到l2,反之亦然。但是例子中又有l1或l2為空的情況,我又設定為l1為空就返回l2,反之亦然。

但是我在這裡卡住了。

輸入

[5][1,2,4]

輸出[1,5,2,4]

預期結果

[1,2,4,5]

這裡明顯l2比l1長,那麼應該講l1插入到l2中,最終結果應該是1,5,2,4,後面認真審題後發現,題目為講兩個有序鍊錶合併為乙個新的有序鍊錶並返回。也就是說,

輸入的兩個鍊錶都是有序的,而且輸入的鍊錶可能為0;

輸出的鍊錶也是有序的,而且是通過輸入鍊錶組合而得到的。

重新整理一下思路,首先對邊界進行限制,即考慮l1和l2為null的情況,然後將l1中的元素插入到l2中去。

寫了一段時間,不會,直接看答案吧,

有2中解法,我使用了迭代的方法,成功了,唯一需要注意的是最後乙個元素需要單獨新增。

listnode*

mergetwolists

(listnode* l1, listnode* l2)

if(l2 ==

null

) listnode* p1 = l1;

listnode* p2 = l2;

listnode* head = new listnode(0

);listnode* p = head;

//迭代方法

while

( p2!=

null

&& p1!=

null

)else

p = p->next;}if

(p1 ==

null)if

(p2 ==

null

)return head->next;

}

leetcode合併兩個有序列表

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。例如 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 class solution def mergetwolists self,l1 listnode,l2 listnode listnode ...

Go實現合併兩個有序列表(leetcode 21)

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 如下 definition for singly linked list.type listnode struct func mergetwo...

LeetCode 簡單 合併兩個有序列表 c

題目為將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 其中存在乙個類,結構為 public class listnode 每乙個都會指向下乙個元素。編寫的c 如下 public static...