//通过索引删除元素 public T DeleteByIndex(int index) { Node go = this.GetNodeByIndex(index - 1); if (go == null || go.next == null) { Console.WriteLine("索引非法!"); return default(T); } Node p = go.next; T old = p.data; go.next = p.next; p = null; if (index == this._curentLinkLength) { //说明删除的是最后一个元素 this._last = go; } this._curentLinkLength--; return old; }
同样的,删除指定位置的元素也是需要获取到这个位置的前一个元素的,同时还要获取到后一个元素,可以通过前一个元素的next的next获取到,然后直接修改前一个元素的next为后一个元素,那么这个要删除的位置的元素的引用就没有了,也就是凭空消失了。
如果有尾结点引用,需要注意的是删除最后一个结点的情况,需要修改尾结点的引用为前一个元素。