我正试图在Python中从头开始实现一个链表类,遇到了一个可能与Python的工作方式有关的问题,但我想确保这一点。
以下是我实现的基础:
class Node(object):
def __init__(self, data=None, next=None):
self.next = next
self.data = data
def appendToTail(self, d: int):
newNode = Node(d)
while self.next is not None: self = self.next
self.next = newNode
以及不能像我希望的那样工作的类方法:
def reverse(self):
prevNode = None
currentNode = self # current = 1
while self is not None:
nextNode = self.next
self.next = prevNode
prevNode = self
self = nextNode
self = prevNode
我正试图在适当的位置反转链接列表,但当我调用此方法时,列表似乎为空。我还实现了这个方法的另一个版本,它在最后预成型了一个return self
,返回的列表确实是我想要的正确结果:
def reverseNotInPlace(n: Node()) -> Node():
prevNode = None
n = n.next
while n is not None:
nextNode = n.next
n.next = prevNode
prevNode = n
n = nextNode
return prevNode
总结:
# creating a linked list such as: [1 -> 2 -> 3]
myList = Node()
myList.appendToTail(1)
myList.appendToTail(2)
myList.appendToTail(3)
# inverting it not in place works
invList = reverseNotInPlace(myList)
# returns [3 -> 2 -> 1]
myList.reverse()
# returns only the first node of myList()
所以我的问题是:我的实现有什么问题吗?或者我想做的事情不完全可能?
非常感谢!
第一种方法存在逻辑错误。Node类不能具有反向方法。因为反转节点实际上没有任何意义。事实上,颠倒链接列表是有意义的。
因此,最好将代码分为两部分:
- 您的节点类具有初始化节点的构造函数
- 一种链表类,具有将节点追加到末尾和反转链表的功能。同时将链表的头传递给这两个函数