将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来 两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。
时间: 2024-10-01 10:10:24 浏览: 34
将两个非递减的有序链表合并为一个非递增的有序链表,可以采用双指针法。首先创建一个新的头节点,并分别用两个指针p1和p2指向两个输入链表的头部。比较这两个指针所指的元素,选择较小的那个添加到新链表中,并移动相应的指针。如果其中一个链表遍历完,就直接把另一个链表剩余部分接到新链表的尾部。
以下是步骤:
1. 初始化一个空链表作为新链表,以及两个指针p1和p2分别指向两个输入链表。
2. 比较p1和p2所指的节点值,将较小的节点添加到新链表并更新p1或p2。
3. 重复步骤2,直到其中一个链表遍历结束。
4. 如果还有未处理的链表,将它添加到新链表的尾部。
在这个过程中,不需要额外的空间,因为我们可以直接修改原链表的结构。例如,在Python中,可以这样做:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_sorted_lists(l1, l2):
dummy = ListNode(0)
tail = dummy
while l1 and l2:
if l1.val <= l2.val:
tail.next = l1
l1 = l1.next
else:
tail.next = l2
l2 = l2.next
tail = tail.next
# 添加剩下的链表
if l1:
tail.next = l1
elif l2:
tail.next = l2
return dummy.next
```
阅读全文