(2)将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两 个链表的存储空间,不另外占用其他的存储空间。表中允许有重复的数据。代码
时间: 2024-10-11 17:10:57 浏览: 20
合并两个非递减的有序链表为一个非递增的有序链表,可以采用双指针法。首先创建一个新的头节点,并让当前节点指向它。然后遍历两个输入链表,每次比较两个链表当前节点的值,选择较小的一个节点作为新链表的下一个节点,并更新对应链表的指针。当其中一个链表遍历完,就把另一个链表剩余的部分直接添加到新链表的后面。
以下是伪代码描述:
```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`则是用于迭代的临时指针。
阅读全文