单链表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

我试图从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)
        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)
。。。它对返回的值不做任何处理,并继续返回<代码>无。依此类推,直到它展开。