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.
Example:
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
解题思路:
这个题最基本的算法就是归并排序,没什么特殊的 ,只不过具体代码使用链表结构而不是数组结构。
代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
link=front=ListNode(0)
while l1 and l2:
if l1.val<=l2.val:
link.next=l1
l1=l1.next
link=link.next
else:
link.next=l2
l2=l2.next
link=link.next
link.next=l1 or l2
return front.next
代码2:
这种代码是提交以后我看了用时最短的结果代码,用的是递推,很厉害。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
"""one step in merge sort"""
if not (l1 or l2):
return None
else:
if not l1:
return l2
elif not l2:
return l1
else:
if l1.val <= l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2