Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
把两个已经排序好的链表合并后返回一个新的有序链表。
1.构造一个新的链表,比较 l1 和 l2 指针指向的节点值,将小的放入新的链表,该链表指针后移。然后继续前面的操作,直到一个链表为空为止。剩下的链表全部链到新链表后面。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 == None:
return l2
if l2 == None:
return l1
#新定义一个链表
l = ListNode(0)
temp = l
while l1 != None and l2 != None:
#因为l1和l2已经是排序好的了,就是相比较按顺序往新链表l里面存放
if l1.val > l2.val:
temp.next = l2
l2 = l2.next
else:
temp.next = l1
l1 = l1.next
temp = temp.next
#其中一个链表已经扫描结束,把另一个链表直接存放在后面就可以了
if l1 == None:
temp.next = l2
if l2 == None:
temp.next = l1
return l.next
2.可以采用递归方式,我没有实践 2,借鉴别人的,参考地址
class Solution(object):
def mergeTwoLists(self, l1, l2):
if l1 == None:
return l2
if l2 == None:
return l1
ret = ListNode(0)
head = ret
while l1 != None and l2 != None:
if l1.val > l2.val:
ret.next = l2
l2 = l2.next
else:
ret.next = l1
l1 = l1.next
ret = ret.next
if l1 == None:
ret.next = l2
if l2 == None:
ret.next = l1
return head.next
这里用到了链表的数据结构,可是已经实现了,并没有自己实现