Python链表

2024-04-24 07:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用链表上的类时遇到了一个障碍。我的代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Item(object):
    def __init__(self, data, next_item = None):
        self.data = data
        self.next_item = next_item

    def get_item(self):
        return self.data

    def set_next(self, setnext):
        self.next_item = setnext

    def get_next(self):
        return self.next_item

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

    def add(self,item):
        temp = Item(item)
        temp.set_next(self.head)
        self.head = temp

    def find(self, item):
        current = self.head
        while current != None:
            if current == item:
                print "Found It!"
            else:
                current = current.get_next()

    def print_list(self):
        node = self.head
        while node:
            print node.get_item()
            node = node.get_next()

    def size(self):
        counter = 0
        current = self.head
        while current != None:
            counter += 1
            current = current.get_next()
        print counter

    def insert(self,item,lpos):
        current = self.head
        while current != lpos:
            current = current.get_next()
            if current == None:
                return None
            else:
                item_insert = Item(item, lpos.next_item())
                lpos.set_next(item_insert)

myList = LinkedList()
myList.add(1)
myList.add(2)
myList.add(3)
myList.insert(8,2)

运行此代码时,方法(insert)失败,并出现以下错误:

Traceback (most recent call last):
  File "main.py", line 72, in <module>
    myList.insert(8,2)
  File "main.py", line 56, in insert
    item_insert = Item(item, lpos.Item.next_item())
  AttributeError: 'int' object has no attribute 'Item'

insert方法将允许您在指定点向链表添加节点,并在考虑insert的情况下重新排列适当的指针。你知道吗

请告知!你知道吗


Tags: selfnoneaddnodedatagetdefcurrent
2条回答

lpos是一个索引,其类型是int。但是你想要设置的是Item.next_item(),当然它不起作用。更改:

# lpos is Int
item_insert = Item(item, lpos.next_item())

收件人:

# use Item instance to do your stuff
item_insert = Item(item, current.next_item())

无论如何,insert的实现应该是不正确的。你知道吗

你没有注意到“item”和“index”之间的区别。索引是列表中项目位置的无符号数字,但该项目是列表中的节点。你知道吗

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Item(object):
    def __init__(self, data, next_item = None):
        self.data = data
        self.next_item = next_item

    def get_item(self):
        return self.data

    def set_next(self, setnext):
        self.next_item = setnext

    def get_next(self):
        return self.next_item

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

    def add(self,item):
        temp = Item(item)
        temp.set_next(self.head)
        self.head = temp

    def find(self, item):
        current = self.head
        while current != None:
            if current == item:
                print "Found It!"
            else:
                current = current.get_next()

    def print_list(self):
        node = self.head
        while node:
            print node.get_item()
            node = node.get_next()

    def size(self):
        counter = 0
        current = self.head
        while current != None:
            counter += 1
            current = current.get_next()
        print counter

    def insert(self,item,lpos):
        if lpos == 0:
            item_insert = Item(item, self.head)
            self.head = item_insert
            return
        current = self.head.get_next()
        previous = self.head
        index = 1
        while index != lpos:
            index += 1
            previous = current
            current = current.get_next()
            if current == None:
                return None

        item_insert = Item(item, current)
        previous.set_next(item_insert)

myList = LinkedList()
myList.add(1)
myList.add(2)
myList.add(3)
myList.insert(8,0)
myList.print_list()

相关问题 更多 >