本关任务:编写代码将两个单链表进行合并。 令 L1=(x1,x2,x3,...,xn), L2=(y1,y2,...,ym),它们是两个线性表,采用带头结点的单链表存储,设计一个算法合并L1,L2,将结果放在线性表L3中,要求如下。 编程要求
时间: 2024-09-23 18:09:18 浏览: 79
本关任务涉及到链表操作,具体要求是将两个已知的带头节点的单链表(L1和L2)合并成一个新的链表L3。以下是解决这个问题的一种常见方法,用Python语言编写:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_two_lists(l1, l2):
# 定义合并后的头节点
dummy = ListNode(0) # 创建虚拟头节点
current = dummy # 当前节点指向虚拟头节点
# 比较两个链表的节点,直到其中一个链表结束
while l1 and l2:
if l1.val < l2.val: # 将较小值的节点添加到新链表
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.next # 返回合并后的链表的头节点
# 示例:
l1 = ListNode(1, ListNode(2, ListNode(4)))
l2 = ListNode(1, ListNode(3, ListNode(4)))
merged_list = merge_two_lists(l1, l2)
while merged_list:
print(merged_list.val, end=" -> ")
merged_list = merged_list.next
```
这个代码首先创建了一个虚拟头节点,然后遍历两个链表,每次都选择较小的节点添加到新的链表中。最后返回合并后的新链表的头节点。
阅读全文