将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
1. 新建一个头节点,再同时遍历两个链表,依次比较两个链表的头节点大小,将小的存入到一个新的链表中(节点无需新建,直接加到头节点的Next下即可),循环判断,直到两个链表均为空时结束。
此思路与官方【方法 2:迭代】思路和代码一致。
python代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
tou = ListNode(None)
tou2 = tou
while l1 != None or l2 != None:
if l1 == None and l2 != None:
tou.next = l2
break
elif l1 != None and l2 == None:
tou.next = l1
break
else:
if l1.val <= l2.val:
tou.next = l1
l1 = l1.next
tou = tou.next
else:
tou.next = l2
l2 = l2.next
tou = tou.next
return tou2.next
思路二、【官方题解方法 1】:递归,感觉这种思路代码是最简洁的。
python代码如下:
class Solution:
def mergeTwoLists(self, l1, l2):
if l1 is None:
return l2
elif l2 is None:
return l1
elif l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
作者:LeetCode
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。