假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。【北京大学1998三(5分)】【厦门大学 20061(3)(20/3分)】,把这道题代码写出来的
时间: 2024-10-09 16:07:53 浏览: 30
数据结构 两个有序线性表的归并算法 西南交通大学
这个问题可以用迭代的方式来解决,我们创建一个新的单链表,并从两个递增排序的链表头部开始比较,每次取出较大的元素添加到新链表的头部,然后移动较小的那个链表的指针。当其中一个链表遍历完之后,我们将另一个剩余的链表直接添加到新链表的尾部即可。以下是Python的示例代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_decreasing_lists(l1, l2):
# 创建新的头节点
dummy_head = ListNode(0)
current = dummy_head
prev = None
while l1 is not None and l2 is not None:
if l1.val > l2.val: # 取较大值
current.next = l1
l1 = l1.next
else: # 取较小值
current.next = l2
l2 = l2.next
current = current.next
# 添加剩余的链表
if l1 is not None:
current.next = l1
elif l2 is not None:
current.next = l2
return dummy_head.next # 返回新链表的头节点
# 示例
l1 = ListNode(3, ListNode(5))
l2 = ListNode(2, ListNode(4))
merged_list = merge_decreasing_lists(l1, l2)
# 遍历打印结果
current = merged_list
while current is not None:
print(current.val, end=" -> ")
current = current.next
```
注意,这个代码假设输入的链表已经按照升序排列。如果不确定,你还需要先对链表进行排序再进行合并操作。
阅读全文