剑指 Offer 25. 合并两个排序的链表-Python实现

题目描述

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

题目难度: Easy

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof

思路分析

链表的问题,一般都是处理指针的移动问题,关键问题是怎么移动,何时移动。合并两个有序链表,只需要每次比较两个链表 A,B 的头节点,将值较小的那一个节点放入新的链表,假设链表 A 的头节点值较小,那么就把A 的头节点放入新的链表,然后将 A 链表的指针指向下一个节点,作为 A 链表的新的头节点,接着再次比较两个链表当前的头节点,直到其中一个链表为空。当某个链表还有节点时,新链表指向链表的剩余节点。为了方便,使用伪头节点,表示指向头节点的一个假节点,最后返回伪头节点的 next 即可。

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:
        dummy_node = new_head = ListNode(0)
        while l1 and l2:
            if l1.val <= l2.val:
                new_head.next, l1 = l1, l1.next
            else:
                new_head.next, l2 = l2, l2.next
            new_head = new_head.next
        new_head.next = l1 if l1 else l2
        return dummy_node.next

你可能感兴趣的:(剑指 Offer 25. 合并两个排序的链表-Python实现)