这里主要是使用分治算法思想解决对于给定的n个有序的链表,进行合并操作之后还是一个有序的链表。如下例子:

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)
如果想要合并n个有序的链表,首先需要直到合并两个有序链表的方法,如果定义一个新的节点,然后将两个链表中的节点按照大小顺序逐个加入即可,python实现的代码如下:
def merge2links(self, head1, head2):
point=mergedhead=ListNode(None)
while head1 and head2:
if head1.val <= head2.val:
point.next = head1
head1 = head1.next
else:
point.next = head2
head2 = head2.next
point = point.next
if not head1:
point.next=head2
else:
point.next=head1
return mergedhead.next
以第二个例子为例展示两个链表合并的过程:

合并前两个链表的初始状态

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)
在合并的最后就是此时的head1是空,需要结束while循环并将point的下一个位置指向head2即可,将mergedhead.next返回,即为合并之后的链表的头结点了。
在直到两个有序链表的合并之后,需要考虑如何n各有序链表,需要利用n个头指针同时进行对比操作这很繁琐易出错,所以我们可以考虑将n个链表两两合并,最终合并成为一个链表。以8个链表合并为例如下:

添加图片注释,不超过 140 字(可选)
python实现的完整代码如下:
class Solution(object):
def mergenlinks(self, links):
length=len(links)
iterval=1
while length>iterval:
for i in range(0,length-iterval,iterval*2):
links[i]=self.merge2links(links[i],links[i+iterval])
iterval*=2
return links[0] if length>0 else None
def merge2links(self, head1, head2):
point=mergedhead=ListNode(None)
while head1 and head2:
if head1.val <= head2.val:
point.next = head1
head1 = head1.next
else:
point.next = head2
head2 = head2.next
point = point.next
if not head1:
point.next=head2
else:
point.next=head1
return mergedhead.next