Python编程题46--合并两个有序链表

2022-01-22  本文已影响0人  wintests

题目

给定两个升序链表(链表中节点存储的元素是按非递减顺序排列),其头节点分别为 head1 和 head2 。请将两个升序链表合并为一个新的 升序 链表并返回,其中新链表是通过拼接给定的两个链表的所有节点组成的。

例如:

原链表转换为列表:[1, 2, 4]、[1, 3, 4]
最终的链表转换为列表:[1, 1, 2, 3, 4, 4]

原链表转换为列表:[]、[]
最终的链表转换为列表:[]

原链表转换为列表:[]、[1, 3, 4]
最终的链表转换为列表:[1, 3, 4]

已知 链表节点的定义、链表与列表相互转换 的代码如下:

class ListNode:  # 单链表
    def __init__(self, val=0, next=None):
        self.val = val  # 链表节点上存储的元素
        self.next = next  # 指向下一个链表节点


def list_to_list_node(numbers):  # 将列表转换为单向链表,并返回链表的头节点
    dummy_head = ListNode(0)
    pre = dummy_head
    for number in numbers:
        pre.next = ListNode(number)
        pre = pre.next
    pre = dummy_head.next
    return pre


def list_node_to_list(node):  # 将单向链表转换为列表
    result = []
    while node:
        result.append(node.val)
        node = node.next
    return result

实现思路--迭代

代码实现

class Solution:
    def mergeTwoLists(self, head1: ListNode, head2: ListNode) -> ListNode:
        dummy_head = ListNode(0)  # 设置一个虚拟头节点
        cur = dummy_head
        while head1 is not None and head2 is not None:
            if head1.val > head2.val:  # 当前节点通过 next 指向当前元素较小的链表节点
                cur.next, head2 = head2, head2.next
            else:
                cur.next, head1 = head1, head1.next
            cur = cur.next
        # 合并后 head1 / head2 最多有1个还没有合并完,直接让 cur 通过 next 指向未合并完的链表
        cur.next = head1 if head1 is not None else head2
        return dummy_head.next

实现思路--递归

代码实现

class Solution:
    def mergeTwoLists(self, head1: ListNode, head2: ListNode) -> ListNode:
        if head1 is None:  # 如果 head1 为空,那么直接返回 head2
            return head2
        elif head2 is None:  # 如果 head2 为空,那么直接返回 head1
            return head1
        elif head1.val > head2.val:  # 如果 head1 大于 head2 节点下的元素,那么返回 head2 ,同时 head2 通过next指向下一个节点
            head2.next = self.mergeTwoLists(head1, head2.next)
            return head2
        else:  # 否则返回 head1 ,同时 head1 通过next指向下一个节点
            head1.next = self.mergeTwoLists(head1.next, head2)
            return head1

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

上一篇下一篇

猜你喜欢

热点阅读