0

私には2つのクラスがあります:

メソッドのSLList(プライベートSLElement _root)

リストの新しい要素を作成するためのSLElement。(public int _value; public SLElement _next)

add-methodを終了しました:

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

だから今私は削除機能が欲しいです。特定の値を持つ要素を削除するようにすでに機能していますが、特定のインデックスを持つ要素を削除するようにしたいと思います。リスト内の要素のインデックスを確認するにはどうすればよいですか?

4

3 に答える 3

4

途中で数えて、リストを頭からトラバースする必要があります。

于 2012-12-06T15:02:33.920 に答える
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());
于 2012-12-06T15:11:15.223 に答える
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;
}
于 2012-12-06T15:05:16.767 に答える