python鍊錶 2個有序鍊錶合併為乙個有序鍊錶

2021-09-25 10:25:39 字數 2441 閱讀 5891

輸入:1->2->5->6->9->10->11

3->4->7->8

輸出:1->2-> 3->4->5->6->7->8->9->10->11

**

# 節點

class lnode:

def __init__(self, data):

self.data = data

self.next = none

# 鍊錶類和add方法

class linkedlist:

def __init__(self):

self.head = none

def add(self, value):

new_node = lnode(value)

if self.head is none:

self.head = new_node

return self.head

cur = self.head

while cur.next:

cur = cur.next

cur.next = new_node

return self.head

# 合併

def merge3(head1, head2):

# 若其中乙個頭節點為空,直接返回另外乙個頭節點

if head1 is none:

return head2

if head2 is none:

return head1

cur1 = head1

cur2 = head2

head = none

cur = none

# 獲取新鏈的頭節點

if cur1.data < cur2.data:

head = cur1

cur = head

cur1 = cur1.next

else:

head = cur2

cur = head

cur2 = cur2.next

# 比較大小,相應加入到新鏈中

while cur1 and cur2:

if cur1.data < cur2.data:

cur.next = cur1

cur = cur1

cur1 = cur1.next

else:

cur.next = cur2

cur = cur2

cur2 = cur2.next

# 如果cur1長,則剩餘部分加入到新鏈中

if cur1:

cur.next = cur1

# 如果cur2長,則剩餘部分加入到新鏈中

if cur2:

cur.next = cur2

# 返回新鏈頭節點

return head

# 測試

print("*****===before*****====")

link1 = linkedlist()

link1.add(1)

link1.add(2)

link1.add(5)

link1.add(6)

link1.add(9)

link1.add(10)

link1.add(11)

c1 = link1.head

while c1:

value1 = str(c1.data) + "->"

sys.stdout.write(value1)

c1 = c1.next

print("")

link2 = linkedlist()

link2.add(3)

link2.add(4)

link2.add(7)

link2.add(8)

c2 = link2.head

while c2:

value2 = str(c2.data) + "->"

sys.stdout.write(value2)

c2 = c2.next

print("")

print("*****===after*****===")

new_head = merge3(link1.head, link2.head)

p = new_head

while p:

value = str(p.data) + "->"

sys.stdout.write(value)

p = p.next

# 結果

*****===before*****====

1->2->5->6->9->10->11->

3->4->7->8->

*****===after*****===

1->2->3->4->5->6->7->8->9->10->11->

合併2個有序鍊錶

將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4思路1 public class mergetwolists public static listnode mergetwolists listn...

鍊錶 合併兩個有序鍊錶

標籤 鍊錶 題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。解題思路 兩種解法 遞迴和非遞迴 拓展 參考 public listnode merge listnode list1,listnode list2 else 非遞迴 public li...

鍊錶 合併有序鍊錶

題目 將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 題解我們這裡利用到了乙個前哨節點,因為兩個鍊錶實際上是已經排好序了,所以我們只需要比較兩個節點誰大誰小,找到小的接上去,然後那個...