单链表Python实现
我试图从python中的单链表中获取倒数第二个元素。以下是我的实现:单链表Python实现,python,singly-linked-list,Python,Singly Linked List,我试图从python中的单链表中获取倒数第二个元素。以下是我的实现: class ListNode: def __init__(self, data, next): self.data = data self.next = next def make_arr(xx, arr): if xx == None: return arr else: arr.insert(0, xx.data) ma
class ListNode:
def __init__(self, data, next):
self.data = data
self.next = next
def make_arr(xx, arr):
if xx == None:
return arr
else:
arr.insert(0, xx.data)
make_arr(xx.next, arr)
当我执行以下操作时:
lst = ListNode(1, ListNode(2, ListNode(3, ListNode(3, None))))
print make_arr(lst, [])[2]
我得到一个错误:
'NoneType' object has no attribute '__getitem__'
您没有在
make\u arr
中返回arr
编辑:代码的有效版本
def make_arr(xx, arr):
if xx == None:
return arr
# No need for the else, in this case
arr.insert(0, xx.data)
return make_arr(xx.next, arr)
除了您的
None
问题之外,您正在将arr
构建为链接列表的反向版本。这是故意的吗?是的,因为一旦我把它颠倒过来……我就能够检索到颠倒列表中的第三个元素,这将是原始列表中倒数第二个元素。(线性算法)是的。。。但是您已经实现了一个递归函数,一旦您到达了xx==None
,Python返回到一个级别并看到:make_arr(xx.next,arr)
。。。它对返回的值不做任何处理,并继续返回<代码>无。依此类推,直到它展开。