Bootstrap

单链表的分解

编写算法创建以整数为数据元素的单向链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。

输入格式:

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()
;