2012-12-06 95 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岁,刚开始我的训练,现在我必须自己做一个单一的链表,以了解它是如何工作的:) –

相关问题