试编写算法,按照输入数据建立带头结点的单向链表,在单向链表中删除所有的偶数元素结点,并输出删除后的新的单链表。
输入格式:
-11 5 9 8 7 3 1 0
输出格式:
-11 5 9 7 3 1
输入样例:
在这里给出一组输入。例如:
1 2 3 4 6 7 8 9 0
输出样例:
在这里给出相应的输出。例如:
1 3 7 9
# 定义链表节点类
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 delete_even(self):
prev = self.head # 从头结点开始遍历
cur = self.head.next # 跳过头结点
while cur:
if cur.data % 2 == 0: # 如果当前节点是偶数
prev.next = cur.next # 将前一个节点的next指向当前节点的next,删除当前节点
else:
prev = cur # 不是偶数则移动prev指针
cur = cur.next # 移动cur指针到下一个节点
# 遍历链表并打印元素
def display(self):
cur = self.head.next # 跳过头结点
while cur:
print(cur.data, end=" ")
cur = cur.next
print()
# 主程序
def main():
linked_list = LinkedList() # 初始化带头结点的单向链表
# 获取用户输入
user_input = input().split()
# 将输入的数字添加到链表,遇到0结束
for num in user_input:
num = int(num)
if num == 0:
break
linked_list.append(num)
# 删除偶数元素节点
linked_list.delete_even()
# 显示删除偶数后的链表
linked_list.display()
return 0
# 调用主程序
main()