Leetcode刷題鍊錶之合併有序鍊錶

2021-09-26 08:14:54 字數 1213 閱讀 2555

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

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

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

由於兩個鍊錶都是有序的,因此相當於固定乙個鍊錶,另乙個鍊錶插入到其中。這裡只要比較兩個鍊錶中節點中值的大小即可。可以先建立乙個新的鍊錶,設定乙個虛擬的節點,同時使用乙個指標來給新鍊錶新增節點。首先比較l1值和l2值,誰小指標指向誰,同時更新l1或者l2(其中值小的),同時指標向右移動一位。在迴圈終止時,l1和l2最多有乙個是非空的。然後指標指向非空的那個節點。

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution else

temp = temp.next;

}temp.next = l1 == null?l2:l1;

return pre.next;

}}

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:輸入:

[1->4->5,

1->3->4,

2->6

]輸出: 1->1->2->3->4->4->5->6

暴力解法,直接把所有值取出來排序,再新增到新鍊錶中。

# 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:

self.nodes =

head = point = listnode(0)

for l in lists:

while l:

l = l.next

for x in sorted(self.nodes):

point.next = listnode(x)

point = point.next

return head.next

Leetcode刷題鍊錶之環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。定義兩個指標,從頭節點開始,兩個指標都向右移動,但是設定他們的移動速度不一樣,如果為環形鍊錶,則指標肯定會相遇。若為直鏈表,兩個指標至少有乙個為空。definition for singly linked list.class listnode public cla...

刷題篇 合併鍊錶

鍊錶合併問題是一道經典題目,包括後面引申出的k個鍊錶合併。leetcode 21 合併兩個有序鍊錶可以使用遞迴與非遞迴兩種方法實現。1.遞迴方法def mergetwolists l1,l2 if not l1 return l2 ifnot l2 return l1 if l1.val l2.va...

Leetcode鍊錶刷題之 206 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?解題思路 原地旋轉鍊錶,可以構建兩個指標,乙個指向當前結點的前乙個,乙個指向當前的結點,每次迴圈的時候,找到當前鍊錶的下乙個,在翻轉的過程中,將...