[](题解 | #合并两个排序的链表#_牛客博客 (nowcoder.net))
# 合并两个排序的链表
class Node:
def __init__(self, element=None):
self.element = element
self.next = None
class Show_Node:
# 根据输入的列表创建链表
def single_link(self, list_):
if not list_:
return Node()
for index, value in enumerate(list_):
if index == 0: # 首元素的插入
head = Node(value)
cur_ = head
else: # 后续元素的插入
cur_.next = Node(value)
cur_ = cur_.next
return head
# 以列表的形式查看链表
def traverse(self, node):
list_ = []
while node is not None: # 遍历所有节点
list_.append(node.element) # 结点元素填入列表
node = node.next
return list_
# 计算链表长度
def length_link(self, node):
cur = node
len_ = 0 # 计数
while cur is not None: # 遍历所有节点
len_ += 1 # 计数
cur = cur.next # cur指向下一个节点
return len_
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
if not pHead1:
return pHead2
if not pHead2:
return pHead1
if pHead1.element <= pHead2.element:
pMerge = pHead1
pMerge.next = self.Merge(pHead1.next, pHead2)
else:
pMerge = pHead2
pMerge.next = self.Merge(pHead1, pHead2.next)
return pMerge
show_code = Show_Node()
l1 = show_code.single_link([1, 4, 5])
l2 = show_code.single_link([2, 3, 9])
s = Solution()
r = s.Merge(l1, l2)
print(show_code.traverse(r))
print(show_code.length_link(r))