2014-02-09 1 views
0

나는 파이썬에서 단독으로 링크 된 목록에서 두 번째 요소를 얻으려고합니다. 여기 내 구현 :단일 링크 목록 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] 

나는 오류 얻을 : 당신은 make_arr에서 arr을 반환하지 않을

'NoneType' object has no attribute '__getitem__' 
+0

'없음'문제 외에도 링크 된 목록의 반대 버전으로'arr '을 빌드하고 있습니다. 그게 목적 이었나요? –

+0

예, 한번 역순으로 처리했기 때문에 역순으로 된 목록의 세 번째 요소를 검색 할 수 있습니다. 역순 목록의 두 번째 요소는 원본 요소의 마지막 요소가됩니다. (선형 알고리즘) – user2837048

답변

2

을 ...

편집 : 작동하는 코드 버전

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) 
+0

이해가 안됩니다. 도달하지 못하면 분명히 arr을 반환합니다. – user2837048

+1

예 ... 재귀 함수를 구현했습니다. 일단'xx == None'이 나오면 파이썬은 한 레벨 뒤로 돌아가서 이것을 봅니다 :'make_arr (xx.next, arr)'... 반환 값과 아무런 관계가 없으며 ... None을 반환합니다. 그리고 너무 긴장을 풀어줍니다. –