document.write('
本题的主要思路为使用归并排序中的合并操作,使用归并的方法把这些链表来逐个归并。具体而言,可
以使用递归的方法,递归地合并已经扁平化的链表与当前的链表。在实现的过程可以使用down指针来
存储扁平化处理后的链表。实现代码如下:
class Node:
def __init__(self,data):
self.data=data
#self.next=None
self.right=None
self.down=None
#self.head=None
class MergeList:
def __init__(self):
self.head=None
#用来合并两个有序的链表*
def merge(self,a,b):
#如果有其中一个链表为空,直接返回另外一个链表
if a==None:
return b
if b==None:
return a
#把两个链表头中较小的结点赋值给result
if a.data<b.data:
result=a
result.down=self.merge(a.down,b)
else:
result=b
result.down=self.merge(a, b.down)
return result
#把链表扁平化处理
def flatten(self,root):
if root==None or root.right==None:
return root
#递归处理root.right链表
root.right=self.flatten(root.right)
#把root结点对应的链表与右边的链表合并
root=self.merge(root, root.right)
return root
#把data插入到链表头
def insert(self,head_ref,data):
new_node=Node(data)
new_node.down=head_ref
head_ref=new_node
#返回新的表头结点
return head_ref
def printList(self):
temp=self.head
while temp!=None:
print temp.data,
temp=temp.down
print \'\\n\'
if __name__=="__main__":
L=MergeList()
#构造链表
L.head=L.insert(L.head, 31)
L.head=L.insert(L.head, 8)
L.head=L.insert(L.head, 6)
L.head=L.insert(L.head, 3)
L.head.right=L.insert(L.head.right, 21)
L.head.right=L.insert(L.head.right, 11)
L.head.right.right=L.insert(L.head.right.right, 50)
L.head.right.right=L.insert(L.head.right.right, 22)
L.head.right.right=L.insert(L.head.right.right, 15)
L.head.right.right.right=L.insert(L.head.right.right.right, 55)
L.head.right.right.right=L.insert(L.head.right.right.right, 40)
L.head.right.right.right=L.insert(L.head.right.right.right, 39)
L.head.right.right.right=L.insert(L.head.right.right.right, 30)
#扇平化链表
L.head=L.flatten(L.head)
L.printList()
程序的运行结果为:
3 6 8 11 15 21 22 30 31 39 40 50 55
');