【发布时间】:2016-08-05 19:28:43
【问题描述】:
我无法弄清楚缺少什么。我已经在网上查看了其他解决方案,当我应用差异时,这些解决方案似乎不起作用。我花了很多时间尝试调试。这是我的代码:
def recurse_reverse(self, curr, level):
print('-' * level, 'curr:', curr.value, '| next:', curr.next.value if curr.next else curr.next)
if (not curr) or (not curr.next): # if there's 0 or 1 node
return curr
# p = self.recurse_reverse(curr.next, level + 1)
self.recurse_reverse(curr.next, level + 1)
print('-' * level, 'curr:', curr.value, '->', curr.next.value, '->',
curr.next.next.value if curr.next.next else curr.next.next)
curr.next.next = curr
# checking if pointer moved
print('-' * level, 'curr:', curr.value, '->', curr.next.value, '->',
curr.next.next.value if curr.next.next else curr.next.next)
# curr.next = None
# return p
我调用时得到的输出
my_list = SinglyLinkedList()
my_list.add_to_tail(1)
my_list.add_to_tail(2)
my_list.add_to_tail(3)
my_list.add_to_tail(4)
print(my_list._head.value) # 1
print(my_list._head.next.value) # 2
print(my_list._head.next.next.value) # 3
print(my_list._head.next.next.next.value) # 4
my_list.recurse_reverse(my_list._head, 1)
这是:
- curr: 1 | next: 2
-- curr: 2 | next: 3
--- curr: 3 | next: 4
---- curr: 4 | next: None
--- curr: 3 -> 4 -> None
--- curr: 3 -> 4 -> 3
-- curr: 2 -> 3 -> 4
-- curr: 2 -> 3 -> 2
- curr: 1 -> 2 -> 3
- curr: 1 -> 2 -> 1
所以在每一层打印,似乎指针都被正确移动了。但是,当我尝试打印链表的头部和尾部时,我调用recurse_reverse,分别得到 1 和 3;然而,我期望的是 4 和 1。
在我见过的许多解决方案中,代码的最后一行是curr.next = None,用于删除当前节点的next 指针,但是当在我的代码中包含它时,我得到AttributeError: 'NoneType' object has no attribute 'value'
我也试过设置
p = self.recurse_reverse(curr.next, level + 1)
然后在最后一行return p,但这也不起作用。
这是我的实现:
class _LinkNode:
def __init__(self, value):
self.value = value
self.next = None
class SinglyLinkedList:
def __init__(self):
self._head = None
self._tail = None
self._length = 0
def add_to_tail(self, value):
"""
Add a new node to the tail of the linked list.
Parameters
----------
value : int, float, string, dict, list, etc.
"""
new_node = _LinkNode(value)
if self._head is None: # if linked list is empty
self._head = new_node
if self._tail: # if linked list has a tail, i.e. > 1 node
self._tail.next = new_node
self._tail = new_node # regardless of current length, update tail
self._length += 1
def recurse_reverse(self, curr, level):
# see above
【问题讨论】:
-
请解释您的功能打算做什么,以及您的链表实现是如何工作的。您提供的输出没有解释输入。
-
你还应该添加你的实现
-
@WayneWerner 我更新了它
标签: python recursion linked-list reverse