我无法弄清楚为什么我的流行音乐不起作用。我尝试了多种方法,但这就是我最终登陆的方法。其他一切似乎都在起作用,但这是我遇到的唯一问题。我试图让代码在没有pos的情况下被调用时以及用pos调用它时。例如,调用pop()并调用pop(4)。 class Node:def init(self,x):self.data = x self.next = None
def __str__(self):
return self.data
def get_data(self):
return self.data
def get_next(self):
return self.next
def set_data(self, newdata):
self.data = newdata
def set_next(self, newnext):
self.next = newnext
class LinkedList:
def __init__(self):
self.head = None
def is_empty(self):
return self.head == None
def size(self):
current = self.head
count = 0
while current != None:
count = count + 1
current = current.get_next()
return count
def add(self,item):
temp = Node(item)
temp.set_next(self.head)
self.head = temp
def __iter__(self):
current = self.head
while current is not None:
yield current
current = current.next
def append(self, item):
current = self.head
if current:
while current.get_next() != None:
current = current.get_next()
current.set_next(Node(item))
else:
self.head = Node(item)
def pop(self, pos):
prev = None
node = self.head
while node != None:
prev = node
node = node.get_next()
if prev == None:
self.head = node.get_next()
else:
prev.next = node.get_next()
我做了一些更新,但我认为它正在按预期工作。除非强制性(对于任务或其他任何东西)使用getter / setter并不被视为非常Pythonic,所以我将它们从Node
类中删除。让我知道您的想法以及是否需要进行任何更新。
class Node:
def __init__(self, data):
self.data = data
self.next = None
def __str__(self):
return str(self.data)
class LinkedList:
def __init__(self):
self.head = None
def is_empty(self):
return self.head is None
def size(self):
count = 0
current = self.head
while current:
count += 1
current = current.next
return count
def add(self, item):
temp = Node(item)
temp.next = self.head
self.head = temp
def __iter__(self):
current = self.head
while current:
yield current
current = current.next
def append(self, item):
current = self.head
if current is None:
self.head = Node(item)
else:
while current.next:
current = current.next
current.next = Node(item)
def pop(self, pos=None):
if pos is None:
pos = self.size()
elif pos < 0 or pos >= self.size():
raise ValueError("Position doesn't exist")
current_pos = 0
prev = None
current = self.head
while current.next and current_pos < pos:
prev = current
current = current.next
current_pos += 1
if prev is None:
self.head = current.next
else:
prev.next = current.next
return current.data
my_linked_list = LinkedList()
assert my_linked_list.is_empty() is True
my_linked_list.add(3)
print(' -> '.join(str(node) for node in my_linked_list))
my_linked_list.add(2)
print(' -> '.join(str(node) for node in my_linked_list))
my_linked_list.add(1)
print(' -> '.join(str(node) for node in my_linked_list))
my_linked_list.append(99)
print(' -> '.join(str(node) for node in my_linked_list))
assert my_linked_list.size() == 4
assert my_linked_list.pop() == 99
print(' -> '.join(str(node) for node in my_linked_list))
assert my_linked_list.size() == 3
assert my_linked_list.pop(1) == 2
print(' -> '.join(str(node) for node in my_linked_list))
assert my_linked_list.size() == 2
安慰:
3
2 -> 3
1 -> 2 -> 3
1 -> 2 -> 3 -> 99
1 -> 2 -> 3
1 -> 3