首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自己做单链表,不能做insert_after函数

自己做单链表,不能做insert_after函数
EN

Stack Overflow用户
提问于 2019-04-08 01:06:13
回答 1查看 112关注 0票数 0

我正在用python制作我自己的单链表。我学会了当我必须在' p‘节点后插入时,首先,创建一个指向p的下一个节点的新节点,然后指向p的下一个节点。

但是当我运行下面的代码时,我得到了错误

代码语言:javascript
复制
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
.
.
.
.
代码语言:javascript
复制
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

输出如下所示...

代码语言:javascript
复制
File "<ipython-input-100-f46148f593d4>", line 74
    element.next() = new_node
    ^
SyntaxError: can't assign to function call

所以我不能继续,因为当我像这样输入值时...

代码语言:javascript
复制
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

结果是..。

代码语言:javascript
复制
---------------------------------------------------------------------------
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函数有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2019-04-08 01:30:06

你不能赋值给函数调用,所以你可能想写成

代码语言:javascript
复制
p._next = new_node

然后,当您应该传递列表中的节点时,传递字符串'C‘,正如您在注释中所述。您可能应该找到带有self._element == 'C'的节点,并将其传递给该方法。因此向SList添加新方法

代码语言:javascript
复制
def find(self, value):
    current = self._head
    while current:
        if current._element == value:
            return current
        current = current._next
    return None

然后调用

代码语言:javascript
复制
temp.insert_after("D", temp.find("C"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55561605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档