我正在用python制作我自己的单链表。我学会了当我必须在' p‘节点后插入时,首先,创建一个指向p的下一个节点的新节点,然后指向p的下一个节点。
但是当我运行下面的代码时,我得到了错误
class SList:
class _Node:
def __init__(self, element, next = None):
self._element = element
self._next = next
def element(self):
return self._element
def next(self):
return self._next
def set_element(self, element):
self._element = element
def set_next(self, next):
self._next = next
def __init__(self, head = None):
self._head = head
.
.
.
.
def insert_after(self, element, p):
# element is new node, and p is the node already in SLL.
new_node = self._Node(element, p.next())
p.next() = new_node
输出如下所示...
File "<ipython-input-100-f46148f593d4>", line 74
element.next() = new_node
^
SyntaxError: can't assign to function call
所以我不能继续,因为当我像这样输入值时...
temp = SList()
temp.insert_first("A")
temp.insert_first("B")
temp.insert_first("C")
temp.insert_first("E")
temp.insert_first("F")
temp.insert_after("D", "C")
# I want A,B,C,D,E,F in continuously
结果是..。
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-101-e9d4a6a04b21> in <module>()
6 temp.insert_first("F")
7
----> 8 temp.insert_after("D", "C")
9
10 # s1.delete_first()
<ipython-input-96-aa629a206e57> in insert_after(self, element, p)
71
72 def insert_after(self, element, p):
---> 73 new_node = self._Node(element, p.next)
74 p.next = new_node
75 # new_node = self._Node(element, p._next())
AttributeError: 'str' object has no attribute 'next'
insert_after函数有什么问题?
发布于 2019-04-08 01:30:06
你不能赋值给函数调用,所以你可能想写成
p._next = new_node
然后,当您应该传递列表中的节点时,传递字符串'C‘,正如您在注释中所述。您可能应该找到带有self._element == 'C'
的节点,并将其传递给该方法。因此向SList添加新方法
def find(self, value):
current = self._head
while current:
if current._element == value:
return current
current = current._next
return None
然后调用
temp.insert_after("D", temp.find("C"))
https://stackoverflow.com/questions/55561605
复制相似问题