我是数据结构和算法的新手。我是自学成才的Python程序员。我正在做一门关于它的课程,我想制作一个链表,在链表中获得一个特定的位置,在列表中插入和删除一个元素。所以我写了代码,对我来说,这似乎很好。它没有给我任何错误,但它执行得不好。
这是我写的代码,
class Element(object):
def __init__(self, value):
self.value = value
self.next = None
class LinkedList(object):
def __init__(self, head=None):
self.head = head
def append(self, new_element):
current = self.head
if self.head:
while current.next:
current = current.next
current.next = new_element
else:
self.head = new_element
def get_position(self, position):
"""Get an element from a particular position.
Assume the first position is "1".
Return "None" if position is not in the list."""
current = self.head
if self.head:
while current.next:
if current == position:
return current
else:
continue
else:
return None
def insert(self, new_element, position):
"""Insert a new node at the given position.
Assume the first position is "1".
Inserting at position 3 means between
the 2nd and 3rd elements."""
current = self.head
if self.head:
while current.next:
if current.next == position:
current.next = new_element
break
else:
continue
else:
self.head = new_element
错误在获取位置功能和插入功能
有人能告诉我我做错了什么吗?循环有问题吗?请帮帮我,我会很感激的!!谢谢
get_position
:中的一些问题
current == position
不是您需要验证的条件。position
是一个数字,current
是一个元素,所以它们并不能真正进行比较。您需要验证position
是1还是2。。。这取决于你在列表中的位置- 循环从不将
current
前进到下一个节点。这代表了一个无限循环 while
条件不应检查current.next
,而是检查current
。否则,您将永远不会检查列表中的最后一个节点
这是您更正的代码:
def get_position(self, position):
if position < 1: # Just in case the position is too small
return
current = self.head
while current and position > 1:
position -= 1
current = current.next
return current
因此,每当位置减少到1,或者没有更多节点时,循环就会结束。在后一种情况下,返回值将为None
。
虽然您的问题是关于get_position
函数的,但您的insert
也有同样的问题。除此之外,它还错误地处理了head
案件。当提供的位置为1时,它还应该更改head
。
insert
方法实际上可以利用上述函数来查找应该在要插入的节点之前的节点:
def insert(self, new_element, position):
if position == 1:
new_element.next = self.head
self.head = new_element
else:
before = self.get_position(position-1)
if before is None:
raise ValueError("invalid position")
new_element.next = before.next
before.next = new_element