【发布时间】:2019-12-04 04:09:30
【问题描述】:
我目前正在学习在线计算机科学入门课程,并且刚刚了解了链表的概念。虽然我了解链表的概念,但我仍然不确定如何处理链表。
因此,我寻求帮助以解决以下问题,这将有助于我理解链表:
编写一个给定链表的函数(不在 LinkedList 类定义中),将更改该链表以过滤掉奇数。函数返回后,链表将只有偶数。
我不确定如何访问列表中的节点并检查它们是奇数还是偶数并相应地删除或保留它们。
如果这似乎是一个微不足道的问题,我深表歉意,但如果有任何可能帮助我学习的帮助,我将不胜感激。
链表和节点类的代码(由在线课程提供):
class Node:
def __init__(self, data=None, next_node=None):
self.data = data
self.next = next_node
def __str__(self):
return str(self.data)
class LinkedList:
def __init__(self):
self.length = 0
self.head = None
def print_list(self):
node = self.head
while node is not None:
print(node, end=' ')
node = node.next
print('')
def add_at_head(self, node):
node.next = self.head
self.head = node
self.length += 1
def remove_node_after(self, node):
if node.next is not None:
temp = node.next
node.next = node.next.next
temp.next = None
self.length -= 1
def remove_first_node(self):
if self.head is None:
return
temp = self.head
self.head = self.head.next
temp.next = None
self.length -= 1
def print_backward(self):
def print_nodes_backward(node):
if node.next is not None:
print_nodes_backward(node.next)
if node is not None:
print(node, end=' ')
if self.head is not None:
print_nodes_backward(self.head)
print('')
【问题讨论】:
-
在不知道您如何表示您的链接列表的情况下,实际上不可能回答这个问题。您应该发布一些代码,显示您遇到问题的地方。
-
@MarkMeyer 问题是我不确定如何继续制作所需的功能。我知道我需要检查元素是奇数还是偶数并消除可能性。我知道如何处理列表,但不知道链表。
-
这个想法是从头到尾迭代列表同时记住前一个节点;当你找到一个垃圾节点时,将
remove_node_after应用到记住的节点,或者如果我们还没有时间记住任何东西,则将头部移动到当前节点。 -
@Amadan 这正是我想要做的,我的问题是我不确定如何遍历链表。通常对于列表/数组,我使用 while/for 循环,但这不适用于链表。如果我只能弄清楚如何做到这一点,我相信我可以解决它。
-
我希望
online courses 不会建议不正确记录您的代码,至少提供docstrings。
标签: python algorithm function linked-list