合并排序链表 - 基于python

题目描述

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

思路分析:

首先要确定合并后链表的头结点,比较两个l1,l2链表的头结点小的哪一个作为新链表的头结点

然后开始合并链表,比较l1,l2下一个节点的大小,小的哪一个作为新链表的下一个节点。这里要遍历其中一个链表

如果l1,l2长度不同,遍历时要判断是否为空,若为空则跳出遍历。跳出遍历时l1,l2可能并未遍历完成,但是其中一个肯定遍历完成,所以只需将新链表的下一节点指向剩下的未遍历的链表即可。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回合并后列表
    def Merge(self, pHead1, pHead2):
        if not pHead1:return pHead2
        if not pHead2:return pHead1
        cur1 = pHead1
        cur2 = pHead2
        if cur1.val>=cur2.val:
            head = cur2
            cur2 = cur2.next
        else:
            head = cur1
            cur1 = cur1.next
        newNode = head
        while cur2!=None:
            if not cur1:break
            if cur1.val>cur2.val:
                newNode.next = cur2
                newNode = newNode.next
                cur2 = cur2.next
            else:
                newNode.next = cur1
                newNode = newNode.next
                cur1 = cur1.next
        if cur1!=None:
            newNode.next = cur1
        if cur2!=None:
            newNode.next = cur2
        return head

 

### 关于L1-063 Python题目的解决方案 对于涉及编号为L1-063的Python编程题目,虽然具体细节未直接提及于此,但从相似类型的题目描述来看,这类问题通常涉及到数据结构的操作或是特定算法的应用。基于以往的经验以及提供的其他类似题目的解析[^1],可以推测该类题目可能要求处理链表或者有理数运算。 #### 链表操作的可能性分析 如果此题与链表有关,则可能是关于如何有效地合并两个已排序的单向链表成一个新的升序排列列表。这可以通过迭代或递归来完成,在每次比较当前节点之后决定下一个要加入的新链表中的元素是什么。这种方法不仅适用于简单的数值型链表,也可以扩展到更复杂的数据类型上应用相同逻辑[^2]。 ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode: dummy = cur = ListNode(0) while l1 and l2: if l1.val < l2.val: cur.next = l1 l1 = l1.next else: cur.next = l2 l2 = l2.next cur = cur.next cur.next = l1 or l2 return dummy.next ``` #### 处理有理数运算的情景探讨 另一方面,如果是针对有理数(分数形式)的相关计算,则需注意输入输出格式的要求。例如,当接收一系列形如`a/b`表示的有理数字符串作为输入时,应该能够正确解析这些表达式并执行相应的加减乘除等基本算术运算。同时还要考虑到简化最终结果以最简分数的形式呈现给用户[^3]。 ```python from fractions import Fraction def process_rational_numbers(input_strs): results = [] for s in input_strs.split(): try: f = Fraction(*map(int,s.split('/'))) results.append(f"{f.numerator}/{f.denominator}") except ValueError as e: print(e) return ' '.join(results) ``` 以上两种情况只是根据已有信息做出的大致猜测;确切的内容还需要依据实际题干来调整具体的解法策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值