leetcode 簡單 21 合併兩個有序鍊錶

2021-10-14 08:45:55 字數 2844 閱讀 3586

思路一:遞迴

# definition for singly-linked list.

# class listnode:

# def __init__(self, val=0, next=none):

# self.val = val

# self.next = next

class

solution

:def

mergetwolists

(self, l1: listnode, l2: listnode)

-> listnode:

if l1 is

none

:return l2

elif l2 is

none

:return l1

elif l1.val

l1.next

=self.mergetwolists(l1.

next

,l2)

return l1

else

: l2.

next

=self.mergetwolists(l1,l2.

next

)return l2

class

solution

else

if(l2==

null

)else

if(l1.val

else

}}

思路二:迭代,逐個對比,安在新鍊錶上

# definition for singly-linked list.

# class listnode:

# def __init__(self, val=0, next=none):

# self.val = val

# self.next = next

class

solution

:def

mergetwolists

(self, l1: listnode, l2: listnode)

-> listnode:

pre=listnode(-1

)#隨便設乙個頭

p=pre

while l1 and l2:

if l1.val

p.next

=l1 l1=l1.

next

else

: p.

next

=l2 l2=l2.

next

p=p.

next

# 合併後 l1 和 l2 最多只有乙個還未被合併完

#我們直接將鍊錶末尾指向未合併完的鍊錶即可

p.next

=l1 if l1 is

notnone

else l2

return pre.

next

class

solution

else

p=p.next;

} p.next= l1==

null

?l2:l1;

return pre.next;

}}

補充:88、合併兩個有序陣列【簡單】

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。

class

solution

:def

merge

(self, nums1: list[

int]

, m:

int, nums2: list[

int]

, n:

int)

->

none

:"""

do not return anything, modify nums1 in-place instead.

"""res=

i=j=

0while i

if i==m:

) j+=

1elif j==n:

) i+=

1elif nums1[i]

i+=1else:)

j+=1 nums1[:]

=res[

:]

class

solution

else

if(j==n)

else

if(nums1[i]

)else

}for

(int x =

0; x < m + n; x++)}

}

不使用額外空間:在nums1從後往前,從nums1[m+n-1]的位置往前填充

class

solution

else

if(p2 ==-1

)else

if(nums1[p1]

> nums2[p2]

)else

nums1[tail--

]= cur;}}

}

21 合併兩個有序鍊錶 簡單

菜鳥解答 definition for singly linked list.struct listnode struct listnode mergetwolists struct listnode l1,struct listnode l2 else scan tmp scan tmp next...

leetcode21 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 思路 每次判斷兩個鍊錶的頭部小的數值,訪問小的,並讓該鍊錶往後移動。注意 注意鍊錶走完,為空的情況即可。遇到的問題 一開始不太理解鍊錶,返回e...

LEETCODE 21 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4c 第一遍將 相等 的這個else分支寫錯了,主要錯誤在於,next指標指向下乙個的這條語句寫到了後面,導致節點自己指向自己,造成了超時錯誤 執...