using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StgSharp_Logic { public class LinkedList { private LinkedTarget _heading; private LinkedTarget _ending; private LinkedTarget _cache; private Counter _amountCounter; public LinkedTarget Heading { get { return _heading; } set { _heading = value; } } public LinkedTarget Ending { get { return _ending; } set { _ending = value; } } public LinkedTarget Cache { get { return _cache; } set { _cache = value; } } public Counter AmountCounter { get { return _amountCounter; } set { _amountCounter = value; } } //构造器 public LinkedList(Counter counter) { this._amountCounter = counter; _amountCounter.Value = 0; _ending = null; _heading = null; } public void Add(LinkedTarget target) { if (_ending != null) { _ending.Next = target; target.Previous = _ending; _ending = target; _amountCounter.Value++; } else { _heading = target; _heading.Previous = null; _ending = target; _ending.Next = null; } } /// /// 根据序号删除一个链表成员。 /// /// public void Remove(int id) { _cache = null; for (int i = 1; i < id; i++) { _cache = _cache.Next; } _cache.Previous = _cache.Next; _cache.Next = _cache.Previous; _cache.Next = null; _cache.Previous = null; _cache = null; _amountCounter.Value--; } /// /// 快速删除链表中已知名称的一个实例。由于不能判别实例是否存在于链表中故安全性较低。在对安全性有要求的情况下应当使用Remove_s方法。 /// /// public void Remove(LinkedTarget target) { target.Previous = target.Next; target.Next = target.Previous; target.Previous = null; target.Next = null; _amountCounter.Value--; } /// /// 该方法用于防止传入不属于该链表的实例。 /// /// /// public void Remove_s(LinkedTarget target) { bool a = true; _cache = _heading; for (int i = 0; _cache.Next != null ; i++) { if (_cache==target) { Remove(target); a = false; _amountCounter.Value--; } } if (a) { throw new Exception("Target can not be found in this List!"); } } } }