题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例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