【问题标题】:LinkedList by PythonPython的链表
【发布时间】:2021-01-15 05:15:26
【问题描述】:
class Node:
    def __init__(self, item):
        self.data = item
        self.next = None


class LinkedList:
    def __init__(self):
        self.nodeCount = 0
        self.head = None #Headnode(First node of LinkedList)
        self.tail = None #Tailnode(Last node of LinkedList)
    def getAt(self, pos): #pos = index number
        if pos<=0 or pos>self.nodeCount:
            return None
        i = 1
        curr = self.head
        while i < pos:
            curr = curr.next
            i += 1
        return curr

这是Python从DS类制作的LinkedList的代码。

我对此代码有 2 个问题

  1. 当我学习 C 和 C++ 时,要制作“节点类”,我必须制作数据字段和链接(指针)字段。我将下一个节点的地址(指针)存储在节点的链接字段中。所以我可以移动到下一个节点。但是在 Python 代码中,我不知道节点类的成员的“self.next”如何指向下一个节点。哪个保存在下一个字段中?

  2. 我没有在 Linked List 类中继承 Node 类。但是当我制作getAt函数时,如何在LinkedList类中使用Node类的成员函数'self.next'呢?

【问题讨论】:

  • 0。请format您的代码块中的代码。 1. Python 为您抽象了指针,因此您不必自己搞乱它们。您需要做的就是将下一个节点的Node 对象分配给self.next。 2. 你不需要继承一个类来访问它的一个对象的成员。这种行为在大多数编程语言中都是一致的,包括 C/C++
  • 0。感谢您的格式化并为我的错误感到抱歉,因为这是我第一次使用 stackoverflow ???? 1. 抱歉,“抽象指针”是什么意思?
  • “抽象”可能不是一个好词。我的意思是说,在 Python 中你不需要处理指针,因为语言会为你处理所有这些

标签: python data-structures linked-list overriding


【解决方案1】:

这里是 Python 中 Node 和 LinkedList 类的简单实现。 Node 类只有 2 个属性:value 和 next。 LinkedList 类只有一个属性:start。当创建一个空的 LinkedList 时,它没有开始。所有有趣的动作都发生在 add_item_to_end() 方法中。当第一项添加到链表中时,会创建一个节点并将其分配为启动。当添加第二项时,会创建另一个节点并将其分配给起始节点之前未占用的下一个。当添加第三、第四、...节点时,add方法从LinkedList的开头开始,遍历所有连续链接的节点,直到到达没有next的节点,然后将该节点的next设置为该节点正在添加中。

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

class LinkedList:
    def __init__(self, start = None):
        self.start = start

    def add_item_to_end(self, item):
        my_node = Node(value=item)
        if self.start == None:
            self.start = my_node
        else:
            p = self.start
            while p.next:
                p = p.next
            p.next = my_node

    #The following method is just to visualize the linked list. 
    #It is not necessary for the functioning of the list:
    def toList(self): 
        result = []
        if self.start:
            p = self.start
            while p is not None:
                result.append(p.value)
                p = p.next
        return result

#example runs
my_ll = LinkedList()
print(my_ll.toList())
#output: []

my_ll.add_item_to_end("bread")
print(my_ll.toList())
#output: ['bread']

my_ll.add_item_to_end("milk")
print(my_ll.toList())
#output: ['bread', 'milk']

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2013-02-13
    • 2012-02-17
    • 2018-03-28
    相关资源
    最近更新 更多