2 回答
TA贡献1817条经验 获得超14个赞
对于我的思考过程的方法是......
什么方法?get_position? insert? delete?
正如@JacobIRR 建议的那样,添加一种打印链接列表的方法可能会有所帮助。看一看:
class Element:
def __init__(self, value):
self.value = value
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, value):
element = Element(value)
if self.head is None:
self.head = element
return
cursor = self.head
while cursor.next is not None:
cursor = cursor.next
cursor.next = element
def __str__(self):
values = []
cursor = self.head
while cursor is not None:
values.append(cursor.value)
cursor = cursor.next
return " -> ".join(values)
def main():
linked_list = LinkedList()
linked_list.append("Foo")
linked_list.append("Bar")
linked_list.append("Fizz")
linked_list.append("Buzz")
print(linked_list)
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
输出:
Foo -> Bar -> Fizz -> Buzz
TA贡献1827条经验 获得超8个赞
所有你需要做的:
首先,尝试在将状态更改为该状态时可视化会发生什么,或者将整个可视化写在纸上,甚至在任何在线软件中以了解更改。
最后/最后,确保你了解链表的核心概念,并用它做一些棘手的、一堆不同的操作。或者,您可以在Google上搜索一些资源。
好吧,这是我为您的问题所做的解决方案:
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):
counter = 1
current = self.head
if position < 1:
return None
while current and counter <= position:
if counter == position:
return current
current = current.next
counter += 1
return None
def insert(self, new_element, position):
counter = 1
current = self.head
if position > 1:
while current and counter < position:
if counter == position - 1:
new_element.next = current.next
current.next = new_element
current = current.next
counter += 1
elif position == 1:
new_element.next = self.head
self.head = new_element
def delete(self, value):
current = self.head
previous = None
while current.value != value and current.next:
previous = current
current = current.next
if current.value == value:
if previous:
previous.next = current.next
else:
self.head = current.next
# Test cases
# Set up some Elements
e1 = Element(1)
e2 = Element(2)
e3 = Element(3)
e4 = Element(4)
# Start setting up a LinkedList
ll = LinkedList(e1)
ll.append(e2)
ll.append(e3)
# Test get_position
# Should print 3
print(ll.head.next.next.value)
# Should also print 3
print(ll.get_position(3).value)
# Test insert
ll.insert(e4,3)
# Should print 4 now
print(ll.get_position(3).value)
# Test delete
ll.delete(1)
# Should print 2 now
print(ll.get_position(1).value)
# Should print 4 now
print(ll.get_position(2).value)
# Should print 3 now
print(ll.get_position(3).value)
再次,任何进一步的问题;拿一张纸,编写代码并可视化正在发生的事情。
添加回答
举报
