(2)将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两 个链表的存储空间,不另外占用其他的存储空间。表中允许有重复的数据。代码
时间: 2024-10-11 16:10:57 浏览: 14
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
合并两个非递减的有序链表为一个非递增的有序链表,可以采用双指针法。首先创建一个新的头节点,并让当前节点指向它。然后遍历两个输入链表,每次比较两个链表当前节点的值,选择较小的一个节点作为新链表的下一个节点,并更新对应链表的指针。当其中一个链表遍历完,就把另一个链表剩余的部分直接添加到新链表的后面。
以下是伪代码描述:
```python
def merge_sorted_lists(list1, list2):
if not list1 or not list2:
return list1 or list2
# 创建新的头节点和指针
head = ListNode(0) # 新链表的头,初始化为虚拟头
current = head
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
# 如果其中一个链表还有剩余,将其添加到新链表的剩余部分
if list1:
current.next = list1
elif list2:
current.next = list2
return head.next # 返回新链表的实际头节点
```
在这个代码中,`ListNode`是一个表示链表节点的简单数据结构,包含一个值`val`和一个指向下一个节点的指针`next`。`head`是合并后的链表的起始位置,而`current`则是用于迭代的临时指针。
阅读全文