2014-06-15 21 views
0

這是一個鏈表我的遞歸鑲嵌方法:我的插入方法有多餘?

public static MyLinkedList recursiveInsert(int value, ref MyLinkedList list) 
{ 
    if (list == null) 
    { 
     return new MyLinkedList(value, null); 
    { 
    else 
    { 
     list.next = recursiveInsert(value, ref list.next); 
     return list; 
    } 
} 

我學習C#和遞歸的那一刻,我的問題是:什麼是以下行冗餘?

list.next = recursiveInsert(value, ref list.next); 
+2

OK,簡單的問題,讓你開始:是什麼這讓你覺得什麼都是「多餘的」? – ClickRick

+0

診斷信息不足。冗餘意味着沒有必要,但狀態在遞歸中總是必需的。你正在傳遞狀態,所以它不是多餘的。 –

+0

與冗餘無關,但對於包含許多元素的列表來說,調用* recursiveInsert *(這相當於listAppend)會冒用盡調用堆棧的風險(即遞歸運行「太深」)。 – elgonzo

回答

0

其他從評論中提到的一些問題,什麼是多餘的,你重新分配已分配的節點列表。下面列出的是足夠的,因爲你已經在使用ref參數(這也是不建議,但我明白,這只是慣例):

public static void recursiveInsert(int value, ref MyLinkedList list) 
{ 
    if (list == null) 
    { 
     list = new MyLinkedList(value, null); 
    } 
    else 
    { 
     recursiveInsert(value, ref list.next); 
    } 
} 
+0

這正是我所追求的!謝謝! – John