021-leetcode算法实现之合并两个有序链表-merge-two-sorted-lists-python&golang实现

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

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列

python

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

# iteration实现
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        prevhead = ListNode(-1) # 哨兵节点,方便返回节点
        prev = prevhead

        # 遍历两链表,如有None则跳出循环
        while l1 and l2:
            if l1.val <= l2.val: # l1的节点值小,prev指针指向l1,l1节点右移
                prev.next = l1
                l1 = l1.next
            else: # l2的节点值小,prev指针指向l2,l2节点右移
                prev.next = l2
                l2 = l2.next
            prev = prev.next

        # prev的next指针指向非空链表
        prev.next = l1 if l1 is not None else l2

        return prevhead.next

if __name__ == "__main__":
    # 1->3->8
    l1_ = [1,3,8]
    l1 = ListNode()
    for item in l1_:
        l1.next = ListNode(-1)
        l1 = l1.next

    # 0->2->3->9->11
    l2_ = [0,2,3,9,11]
    l2 = ListNode()
    for item in l2_:
        l2.next = ListNode(-1)
        l2 = l2.next
原文地址:https://www.cnblogs.com/davis12/p/15384599.html