编写算法创建以整数为数据元素的单向链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。
输入格式:
1 2 3 4 5 6 7 8 9 0
输出格式:
1 3 5 7 9
2 4 6 8
输入样例:
在这里给出一组输入。例如:
-3 7 6 8 -5 10 2 7 4 0
输出样例:
在这里给出相应的输出。例如:
-3 7 -5 7
6 8 10 2 4
# 定义链表节点类
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
# 定义单向链表类
class LinkedList:
def __init__(self):
self.head = Node() # 初始化带头结点
# 添加节点到链表尾部
def append(self, data):
new_node = Node(data)
cur = self.head
while cur.next: # 找到链表的尾部
cur = cur.next
cur.next = new_node
# 遍历链表并将元素分成奇数和偶数两个链表
def split_odd_even(self):
odd_list = LinkedList() # 存储奇数的链表
even_list = LinkedList() # 存储偶数的链表
cur = self.head.next # 跳过头结点
while cur:
if cur.data % 2 == 0: # 偶数
even_list.append(cur.data)
else: # 奇数
odd_list.append(cur.data)
cur = cur.next
return odd_list, even_list
# 打印链表的所有元素
def display(self):
cur = self.head.next # 跳过头结点
while cur:
print(cur.data, end=" ")
cur = cur.next
print()
# 主程序
def main():
# 创建初始链表
linked_list = LinkedList()
# 获取用户输入并构建链表,遇到0结束
input_data = input().split()
for num in input_data:
num = int(num)
if num == 0:
break
linked_list.append(num)
# 分解链表为奇数链表和偶数链表
odd_list, even_list = linked_list.split_odd_even()
# 输出奇数链表
odd_list.display()
# 输出偶数链表
even_list.display()
# 调用主程序
main()