以下是一个简单的链表程序,我知道链表在概念上是如何工作的(添加,删除等),但是我发现很难从面向对象的设计角度来理解链表的工作方式。

码:

class Node():

    def __init__(self,d,n=None):
        self.data = d
        self.next_node = n

    def get_next(self):
        return self.next_node

    def set_next(self,n):
        self.next_node = n

    def get_data(self):
        return self.data

    def set_data(self,d):
        self.data = d

class LinkedList():

    def __init__(self,r = None):
        self.root = r
        self.size = 0

    def get_size(self):
        return self.size

    def add(self,d):
        new_node = Node(d,self.root)
        self.root = new_node
        self.size += 1

    def get_list(self):
        new_pointer = self.root
        while new_pointer:
            print new_pointer.get_data()
            new_pointer = new_pointer.get_next()

    def remove(self,d):
        this_node = self.root
        prev_node = None
        while this_node:
            if this_node.get_data() == d:
                if prev_node:
                    prev_node.set_next(this_node.get_next())
                else:
                    self.root = this_node
                self.size -= 1
                return True
            else:
                prev_node = this_node
                this_node = this_node.get_next()
        return False

    def find(self,d):
        this_node = self.root
        while this_node:
            if this_node.get_data() == d:
                return d
            else:
                this_node = this_node.get_next()
        return None

myList = LinkedList()
myList.add(5)
myList.add(8)
myList.add(12)
myList.get_list()


我在这里有几个问题。


如何存储值。据我了解,每个变量可以包含一个值。那么data / next_node如何保存多个值。并且next_node是否保存下一个节点的内存位置?
new_pointer.get_data() new_pointer如何能够访问get_data()?我们不需要一个实例来访问Node的方法吗?


这个问题可能很愚蠢,但是对于面向对象的编程我还是很陌生。如果有人可以回答这些问题或发布解决这些问题的外部链接,那将非常有帮助。

提前致谢。

最佳答案

next_nodeNode的实例,因此它具有自己的data字段。 next_node是对节点对象的引用,它是某个内存地址(但是它不是类C的指针,因为您不需要取消引用它或任何东西)。
我假设您正在谈论get_list()。 new_pointer是Node的实例。 (除非它是None,否则将永远不会进入get_data()调用)。当您执行add时,您将创建该Node实例并将其设置为root。然后在get_list中将new_pointer设置为root

关于python - 需要帮助了解python简单链表程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31108022/

10-13 07:45