【问题标题】:What is wrong with this linked list implementation? [closed]这个链表实现有什么问题? [关闭]
【发布时间】:2020-07-18 13:27:04
【问题描述】:

运行脚本会产生错误:

Traceback (most recent call last):
  File "D:/PycharmProjects/GeeksforGeeks/Linked List/Insertion of Nodes in LinkedList.py", line 49, in <module>

llist.printList()
  File "D:/PycharmProjects/GeeksforGeeks/Linked List/Insertion of Nodes in LinkedList.py", line 39, in printList

违规行是:

print(temp.data,end=' ')

AttributeError: 'int' 对象没有属性 'data'

我的代码是:-

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def push(self,new_data):
        new_node = Node(new_data)
        new_node.next = self.head
        self.head = new_node

    def insertAfter(self,prev_node,new_data):
        if prev_node is None:
            return

        new_node = Node(new_data)
        new_node.next = prev_node.next
        prev_node.next = new_node

    def append(self,new_data):
        new_node = Node(new_data)

        if self.head is None:
            self.head = new_node
            return

        last = self.head
        while (last.next):
            last = last.next

        last.next = new_data

    def printList(self):
        temp = self.head
        while (temp):
            print(temp.data,end=' ')
            temp = temp.next

if __name__ == '__main__':
    llist = LinkedList()
    llist.append(6)
    llist.push(7)
    llist.push(1)
    llist.append(4)
    llist.insertAfter(llist.head.next,8)
    llist.printList()

【问题讨论】:

  • “追加”中的最后一行:“last.next = new_data”
  • 您正在使最后一个节点中的next 链接指向数据,而不是指向包含数据的节点

标签: python singly-linked-list attributeerror


【解决方案1】:

在你的方法appendlast.next应该是new_node

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def push(self,new_data):
        new_node = Node(new_data)
        new_node.next = self.head
        self.head = new_node

    def insertAfter(self,prev_node,new_data):
        if prev_node is None:
            return

        new_node = Node(new_data)
        new_node.next = prev_node.next
        prev_node.next = new_node

    def append(self,new_data):
        new_node = Node(new_data)

        if self.head is None:
            self.head = new_node
            return

        last = self.head
        while (last.next):
            last = last.next

        last.next = new_node

    def printList(self):
        temp = self.head
        while (temp):
            print(temp.data,end=' ')
            temp = temp.next

if __name__ == '__main__':
    llist = LinkedList()
    llist.append(6)
    llist.push(7)
    llist.push(1)
    llist.append(4)
    llist.insertAfter(llist.head.next,8)
    llist.printList()

输出:

1 7 8 6 4

【讨论】:

    【解决方案2】:

    append 函数中有一个错误:

        def append(self,new_data):
            new_node = Node(new_data)
    
            if self.head is None:
                self.head = new_node
                return
    
            last = self.head
            while last.next:
                last = last.next
    
            last.next = new_node # should not be new_data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多