将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入: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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐