2012-12-06 72 views
0

我有兩個類:如何獲取單個鏈表中元素的索引?

SLList的方法(私人SLElement _root)

SLElement用於創建列表中的新元素。 (公衆詮釋_value;公共SLElement _next)

我已經完成加載方法:

public void Add(int value) 
{ 
    SLElement addNewElement = new SLElement(); 
    addNewElement._value = value; 
    SLElement rootCopy = _root; 
    _root = addNewElement; 
    addNewElement._next = rootCopy; 
    Console.WriteLine(addNewElement._value); 
} 

所以現在我想刪除功能。我已經得到它的工作,它刪除一個具有特定值的元素,但我想它,以便它刪除具有特定索引的元素。我如何才能找到列表中元素的索引?

+0

是這是作業嗎?任何你不使用c#鏈表的原因?你應該跳過i元素,並刪除當前元素 –

+0

當我調用沒有下一個元素的SLElement上的_next會發生什麼? –

+0

你得到一個NullReferenceException –

回答

1

環拋指數倍,並找到元素

public SLElement Remove(int index) 
{ 
    SLElement prev = _root; 
    if(prev == null) return null; //or throw exception 
    SLElement curr = _root.next; 
    for(int i = 1; i < index; i++) 
    { 
     if(curr == null) return null; //or throw exception 
     prev = curr; 
     curr = curr.next; 
    } 
    prev.next = curr.next; //set the previous's node point to current's next node 
    curr.next = null; 
    return curr; 
} 
+0

這真的幫了我很多,謝謝:)另外一件事:我想你可能想改變「return rtn;」 「返回curr」; ? –

+0

更改爲curr ..謝謝:) – ajp

4

你需要從頭開始遍歷你的列表,並沿着路徑計數。

2

除非你有很強的理由,你想創建自己的,我相信你應該去一個LinkedList

var list = new LinkedList<SLElement>(); 

list.AddAfter(list.AddFirst(new SLElement()), new SLElement()); 

list.Remove(list.Select((i, j) => new { i, j }) 
    .Where(j => j.j == 0)//remove the first node 
    .Select(i => i.i) 
    .FirstOrDefault()); 
+0

如果這不是作業,我會建議相同的。 +1 – Earlz

+0

沒有它不是一個功課,我是16歲,剛開始我的訓練,現在我必須自己做一個單一的鏈表,以瞭解它是如何工作的:) –

相關問題