Leetcode題解 合併有序鍊錶

2021-10-08 19:35:18 字數 2069 閱讀 1704

此題同劍指offer16題。 

方法1:利用堆將所有鍊錶都放在堆中,每次取出堆頂元素

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class solution:

def mergeklists(self, lists: list[listnode]) -> listnode:

import heapq

dummy = listnode(0)

p = dummy

head =

for i in range(len(lists)):

if lists[i] :

lists[i] = lists[i].next

while head:

p.next = listnode(val)

p = p.next

if lists[idx]:

lists[idx] = lists[idx].next

return dummy.next

方法2:分治

class solution(object):

def mergeklists(self, lists):

if not lists:

return none

# 通過mid將陣列一分為二,並不斷縮小規模,當規模為1時返回並開始合併

# 通過合併兩個鍊錶,不斷增大其規模,整體看就是不斷縮小-最後不斷擴大的過程

def helper(begin,end):

if begin==end:

return lists[begin]

mid = begin+(end-begin)/2

left = helper(begin,mid)

right = helper(mid+1,end)

return merge(left,right)

# 合併兩個有序鍊錶

def merge(a,b):

if not (a and b):

return a if a else b

if a.val<=b.val:

a.next = merge(a.next,b)

return a

else:

b.next = merge(a,b.next)

return b

return helper(0,len(lists)-1)

合併有序鍊錶

將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的,即不開闢新的記憶體空間 首先,為了方便操作鍊錶,我們定義乙個dummyhead,我們遍歷兩個鍊錶,直到其中有乙個到達尾部,則停下來 在遍歷的過程中,我們將元素值小的節點依次鏈在mergerlist的後邊,最後,我們看看哪...

合併有序鍊錶

題目描述將兩個有序的鍊錶合併為乙個新鍊錶,要求新的鍊錶是通過拼接兩個鍊錶的節點來生成的。塊 listnode mergetwolists listnode l1,listnode l2 if l2 null if l1 val l2 val else listnode pre target list...

合併有序鍊錶

21.合併兩個有序鍊錶 難度簡單912收藏分享切換為英文關注反饋 將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4class solution def mergetwolists self...