编写算法创建以整数为数据元素的单向链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 输入格式: 1 2 3 4 5 6 7 8 9 0 输出格式: 1 3 5 7 9 2 4 6 8
时间: 2024-10-10 20:02:35 浏览: 51
要编写算法将整数单向链表按照奇偶性分解,你可以采用迭代或递归的方式。这里我会提供一个简单的迭代解决方案:
首先,你需要定义链表节点结构:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
```
然后,我们创建一个辅助函数`is_even`用于判断一个数字是否为偶数:
```python
def is_even(num):
return num % 2 == 0
```
接下来,是关键的链表分解函数`even_odd_split`:
```python
def even_odd_split(head):
# 初始化头节点为当前遍历节点
current = head
odd_head = None
even_head = None
odd_tail = None
while current:
if is_even(current.val):
if not even_head:
even_head = ListNode(current.val)
odd_tail = even_head
else:
odd_tail.next = ListNode(current.val)
odd_tail = odd_tail.next
else:
if not odd_head:
odd_head = ListNode(current.val)
odd_tail = odd_head
else:
odd_tail.next = ListNode(current.val)
odd_tail = odd_tail.next
current = current.next
return odd_head, even_head
```
最后,你可以通过传入链表头节点来调用这个函数并打印结果:
```python
# 假设输入链表已存在,例如:
input_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
head = ListNode(*input_list)
odd_list, even_list = even_odd_split(head)
# 打印奇数链表
if odd_list:
print("1 3 5 7 9", end=" ")
current = odd_list
while current.next:
print(current.next.val, end=" ")
current = current.next
else:
print("None")
# 打印偶数链表
if even_list:
print("\n2 4 6 8", end="")
current = even_list
while current.next:
print(current.next.val, end=" ")
current = current.next
else:
print("None")
```
阅读全文