鍊錶問題 合併兩個有序的單鏈表

2021-08-21 16:30:12 字數 1373 閱讀 2010

【題目】

給定兩個有序單鏈表的頭節點head1和head2,請合併兩個有序鍊錶,合併後的鍊錶依然有序,並返回合併後鍊錶的頭節點。

【思路】

選擇小的head作為頭結點,然後將另乙個鍊錶的所有節點併入head較小的鍊錶中即可

【python】

def merge(head1,head2):

if head1 == none:

return head2

if head2 == none:

return head1

head == head1 if head1.val < head2 else head2

cur1 = head1 if head == head1 else head2

cur2 = head1 if head == head2 else head1

pre = none

next = none

while cur1 != none and cur2 != none:

if cur1.val <= cur2.val:

pre = cur1

cur1 = cur1.next

else:

next = cur2.next

pre.next = cur2

cur2.next = cur1

pre = cur2

cur2 = next

pre.next = cur1 if cur2 == none else cur2

return head

【另乙個題目】

合併兩個已排序的鍊錶,並將其作為乙個新列表返回。新列表應該通過拼接前兩個列表的節點來完成。

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

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

【python】

def merge(l1,l2):

dummy = listnode(0)

s = dummy

while l1 and l2:

if l1.val > l2.val:

s.next = l2

l2 = l2.next

else:

s.next = l1

l1 = l1.next

if l1:

while l1:

s.next = l1

if l2:

while l2:

s.next = l2

return dummy.next

合併兩個有序單鏈表

include using namespace std typedef struct nodenode,linklist void creatlist linklist l void insert int n,node p void show linklist l cout num head2 ne...

合併兩個有序單鏈表

思路 第一種 遞迴法 這個方法不好想,遞過去的時候做的事情是找到新的單鏈表的下乙個節點,歸的時候做的是告訴每個節點的next是什麼繫結關係,帶入資料就能知道怎麼回事 public listnode merge listnode a,listnode b if b null listnode newh...

合併兩個有序單鏈表

題目 給定兩個有序單鏈表的頭節點head1和head2,請合併兩個有序鍊錶,合併後的鍊錶依然有序,並返回合併後的鍊錶的頭節點。例如 0 2 3 7 null 1 3 5 7 9 null 合併後的鍊錶為 0 1 2 3 3 5 7 7 9 null 本題考察鍊錶基本操作 關鍵是能寫出時間複雜度o m...