2013-11-09 70 views
0

如何使用遞歸來獲取隨機值列表並將其設置爲鏈接列表?每個值都是一個節點。截至目前,我已經嘗試實施以下...使用遞歸從列表中創建鏈表

def pyListToMyList(pylst): 
     lists = mkMyList() 
     lists.head = pyListToMyListRec(pylst) 
     return lists 

def pyListToMyList(pylst):    
     if pylst: 
       return mkEmptyNode() 
     else: 
       return mkNode(pylst[0], pyLstToMyListRec(pylst[1:])) 

問題是else語句返回錯誤,指出索引超出範圍。

+0

我將修改原帖 – user2933041

回答

1
def pyListToMyList(pylst):    
    if not pylst: 
     return mkEmptyNode() 
    else: 
     return mkNode(pylst[0], pyLstToMyListRec(pylst[1:])) 

編輯:雖然這是O(n^2),因爲所有列表複製。

我會做

def pyListToMyList(pylst, i=0): 
    if i > len(pylst): 
     return mkEmptyNode() 
    else: 
     return mkNode(pylst[i], pyLstToMyListRec(pylst, i+1)) 

或更高效,更不太可能溢出堆棧(雖然這並不使用遞歸):

def pyListToMyList(pylst): 
    lst = mkEmptyNode() 
    for x in reversed(pylist): 
     lst = mkNode(x, lst) 
    return lst