合并两个排序的链表

本文介绍了一种将两个单调递增链表合并成一个新链表的方法,确保新链表同样保持单调不减的顺序。通过定义一个新的空链表来依次插入较小节点的方式实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回合并后列表
    def Merge(self, pHead1, pHead2):
        # write code here
        p = ListNode(0)
        # 定义一个p链表的引用,输出的时候使用
        pHead = p

        if pHead1 == None and pHead2 == None:
            return

        while pHead1 and pHead2:
            # 比较两个链表的首结点,小的的结点则合并到第三个链表尾结点,并向前移动一个结点。
            if pHead1.val <= pHead2.val:
                p.next = pHead1
                pHead1 = pHead1.next
            else:
                p.next = pHead2
                pHead2 = pHead2.next
            # p要往后移动一位,因为当前位存储的是上面if-else语句得到的数
            p = p.next

        # 自定义的链表指向剩余未遍历结束的链表
        if pHead1:
            p.next = pHead1
        elif pHead2:
            p.next = pHead2

        # 输出pHead结点的下一个结点,因为第一个结点是自定义的数,不属于链表本身
        # 为什么不使用p链表直接输出?
        # 因为p当前指向的结点并不是首结点,如果直接输出p的话首结点(创建链表时自定义的结点)也会输出
        return pHead.next



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值