Python——合并两个有序链表的几种方法(含输入输出代码)
# 递归算法
class ListNode(object):
def __init__(self,x):
self.val=x
self.next=None
class Linklist:
def __init__(self):
self.head=None
def initlist(self,data):
self.head=ListNode(data[0])
r=self.head
p=self.head
for i in data[1:]:
node=ListNode(i)
p.next=node
p=p.next
return r
def printlist(self,head):
if head==None:return
node=head
while node!=None:
print(node.val,end=" ")
node=node.next
class Solution(object):
def merge_twolists(self,l1,l2):
if l1 is None:
return l2
if l2 is None:
return l1
if l1.val<=l2.val:
l1.next=self.merge_twolists(l1.next,l2)
return l1
else:
l2.next = self.merge_twolists(l1,l2.next)
return l2
if __name__=='__main__':
test=Solution()
L=Linklist()
data1=[1,2,6]
data2=[3,4,5]
l1=L.initlist(data1)
l2=L.initlist(data2)
L.printlist(l1)
print("\r")
L.printlist(l2)
print("\r")
print("合并后的链表:")
data3=test.merge_twolists(l1,l2)
L.printlist(data3)
``
# 非递归算法
class ListNode(object):
def __init__(self,x):
self.val=x
self.next=None
class Linklist:
def __init__(self):
self.head=None
def initlist(self,data):
self.head=ListNode(data[0])
r=self.head
p=self.head
for i in data[1:]:
node=ListNode(i)
p.next=node
p=p.next
return r
def printlist(self,head):
if head==None:return
node=head
while node!=None:
print(node.val,end=" ")
node=node.next
class Solution:
def merge_twolists(self,l1,l2):
head=ListNode(-1)
pre=head
while l1 and l2:
if l1.val<=l2.val:
pre.next=l1
l1=l1.next
else:
pre.next=l2
l2=l2.next
pre=pre.next
if l1 is None:
pre.next=l2
if l2 is None:
pre.next=l1
return head.next
if __name__=='__main__':
test=Solution()
L=Linklist()
data1=[1,2,6]
data2=[3,4,5]
l1=L.initlist(data1)
l2=L.initlist(data2)
L.printlist(l1)
print("\r")
L.printlist(l2)
print("\r")
print("合并后的链表:")
data3=test.merge_twolists(l1,l2)
L.printlist(data3)
``