输入: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->