已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。完整可直接运行代码
时间: 2024-10-11 08:00:51 浏览: 62
两个有序链表序列的合并_C语言_
5星 · 资源好评率100%
当你需要将两个已排序的单链表(非降序)S1和S2合并成一个新的有序链表S3时,可以采用递归或迭代的方式。这里提供一种简单的迭代解决方案,使用两个指针分别指向每个链表的头部,并比较它们的值,每次选择较小的那个节点添加到新链表S3,并移动对应的指针。
```python
# 定义链表节点结构
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_sorted_lists(l1, l2):
# 创建头结点并初始化指向当前链表节点的指针
dummy_head = ListNode(0)
current = dummy_head
while l1 and l2:
if l1.val <= l2.val: # 如果l1的值小于等于l2的值
current.next = l1
l1 = l1.next
else:
current.next = l2
l2 = l2.next
current = current.next
# 将剩余链表连接至新链表末尾(如果其中一个链表已经遍历完)
if l1:
current.next = l1
elif l2:
current.next = l2
return dummy_head.next # 返回新链表的第一个实际元素,即头节点的下一个节点
# 示例
s1 = ListNode(1, ListNode(2, ListNode(4)))
s2 = ListNode(1, ListNode(3, ListNode(4)))
merged_list = merge_sorted_lists(s1, s2)
while merged_list:
print(merged_list.val) # 输出: 1 1 2 3 4 4
merged_list = merged_list.next
```
阅读全文