有一个含2n个整数的单链表L=(a。,bo,a」,b;,… 个算法将其拆分成两个带头结点的单链表A和B,其中A=(ao,a₁,…,an-1),B=(bn-1, bn-2,…,bo)。代码
时间: 2024-09-23 19:13:26 浏览: 30
2N6348A的技术参数
这个任务通常被称为“拆分链表”。你可以通过迭代或者递归的方式来实现。下面是一个简单的Python示例,使用迭代方法:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def splitList(head):
# 初始化两个空头节点作为新链表的开始
A_head = ListNode(0)
B_head = ListNode(0)
# 初始化指针,分别指向A和B的当前元素
A_ptr = A_head
B_ptr = B_head
# 当链表非空时
while head:
# 将当前元素添加到A链表,并移动指针
A_ptr.next = ListNode(head.val)
A_ptr = A_ptr.next
head = head.next
# 如果链表还有剩余元素,则将下一个元素移到B链表
if head:
B_ptr.next = ListNode(head.val)
B_ptr = B_ptr.next
head = head.next
# 结束后A_head.next就是原链表的剩余部分,即B链表的头部
A_ptr.next = None
return A_head.next, B_head.next
# 使用示例
# 假设链表L的结构为: (1 -> 2 -> 3 -> 4 -> 5 -> 6)
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)
head.next.next.next.next.next = ListNode(6)
A, B = splitList(head)
```
这个函数会返回两个新的链表,第一个链表A包含前半部分(a1, a2, ..., an-1),第二个链表B包含后半部分(bn-1, bn-2, ..., b1)。
阅读全文