//通过索引删除元素
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为后一个元素,那么这个要删除的位置的元素的引用就没有了,也就是凭空消失了。
如果有尾结点引用,需要注意的是删除最后一个结点的情况,需要修改尾结点的引用为前一个元素。