7-8 两个有序链表序列的合并 分数 10 作者 DS课程组 单位 浙江大学 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。 输出格式: 在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。 输入样例: 1 3 5 -1 2 4 6 8 10 -1 输出样例: 1 2 3 4 5 6 8 10
时间: 2025-03-20 15:15:46 浏览: 70
这是一个经典的“合并两个有序链表”的问题,通常用于考察对链表操作以及排序算法的理解能力。以下是解决该问题的基本思路及步骤:
### 思路分析
1. **初始化指针**
定义两个指针`p1`和`p2`分别指向两个输入链表的头节点,并创建一个新的链表`S3`及其辅助指针`current`。
2. **比较大小并插入到新链表**
比较当前`p1`和`p2`所指向值的大小,将较小的那个节点加入到结果链表`S3`中,并将其对应的指针向前移动一位。
3. **处理剩余部分**
当其中一个链表遍历完时,直接将另一个链表剩下的部分连接到结果链表`S3`上。
4. **特殊情况处理**
如果任意一个输入链表为空,则返回另一个链表作为最终的结果;如果两个都为空则输出`NULL`。
---
### 示例代码(Python)
以下是一个基于上述思想的具体实现方案:
```python
class ListNode:
def __init__(self, val=0):
self.val = val
self.next = None
def merge_two_lists(list1, list2):
# 创建哑节点方便后续操作
dummy = current = ListNode()
while list1 and list2:
if list1.val < list2.val:
current.next = list1
list1 = list1.next
else:
current.next = list2
list2 = list2.next
current = current.next
# 连接剩余的部分
current.next = list1 or list2
return dummy.next
# 辅助函数:构建链表
def build_list(arr):
if not arr:
return None
head = ListNode(arr[0])
current = head
for num in ar
阅读全文
相关推荐












