public PrioritySingleLinkedList(Func <T, T, bool> comparer, IOrderedEnumerable <T> collection) { this.comparer = comparer; save = new SingleLinkedList <T>(); foreach (T item in collection) { SingleNodeData <T> temp = new SingleNodeData <T>(item); if (save.Count == 0) { save.AddFirst(temp); } else { int index = save.CustomBinarySearch(temp, 0, save.Count, (x, y) => { if (comparer(x.data, y.data)) { return(-1); } else { return(1); } }); save.AddAfter(index, temp); } } }
public void AddFirst(SingleNodeData <T> node) { node.Next = begin; begin = node; if (_size == 0) { end = node; } _size++; }
public void AddLast(SingleNodeData <T> node) { end.Next = node; end = node; node.Next = null; if (_size == 0) { begin = node; } _size++; }
public bool MoveNext() { if (index >= 0) { currentItem = currentItem.Next; } index++; if (currentItem == null) { return(false); } return(true); }
public SingleNodeData <T> AddLast(T value) { SingleNodeData <T> node = new SingleNodeData <T>(value); end.Next = node; end = node; if (_size == 0) { begin = node; } _size++; return(node); }
public SingleNodeData <T> AddFirst(T value) { SingleNodeData <T> node = new SingleNodeData <T>(value); node.Next = begin; begin = node; if (_size == 0) { end = node; } _size++; return(node); }
public SingleNodeData <T> Find(T value) { SingleNodeData <T> pTemp = begin; while (pTemp != null) { if (pTemp.data.Equals(value)) { return(pTemp); } pTemp += 1; } return(null); }
public SingleNodeData <T> FindLast(T value) { SingleNodeData <T> pTemp = begin; SingleNodeData <T> result = null; while (pTemp != null) { if (pTemp.data.Equals(value)) { result = pTemp; } pTemp += 1; } return(result); }
public SingleLinkedList(IEnumerable <T> collection) { begin = new SingleNodeData <T>(collection.ElementAt(0)); SingleNodeData <T> pNext = begin; int count = collection.Count(); for (int i = 1; i < count; i++) { SingleNodeData <T> next = new SingleNodeData <T>(collection.ElementAt(i)); pNext.Next = next; pNext = next; } end = pNext; _size = count; }
public SingleNodeData <T> this[int index] { get { if (_size <= index || index < 0) { throw new IndexOutOfRangeException(); } SingleNodeData <T> result = begin; for (int i = 0; i < index; i += 1) { result = result.Next; } return(result); } }
public void AddBefore(int index, SingleNodeData <T> node) { if (index >= _size || index < 0) { throw new ArgumentOutOfRangeException(); } SingleNodeData <T> pTemp = begin; for (int i = 1; i <= index; i++) { pTemp++; } SingleNodeData <T> next = pTemp.Next; pTemp.Next = node; node.Next = next; }
public SingleNodeData <T> AddAfter(int index, T value) { if (index >= _size || index < 0) { throw new ArgumentOutOfRangeException(); } SingleNodeData <T> pTemp = begin; for (int i = 1; i < index; i++) { pTemp++; } SingleNodeData <T> node = new SingleNodeData <T>(value); SingleNodeData <T> next = pTemp.Next; pTemp.Next = node; node.Next = next; return(node); }
public void Concat(SingleLinkedList <T> nodeList) { this.end.Next = nodeList.begin; this.end = nodeList.end; _size += nodeList.Count; }
public void Reset() { currentItem = null; }
public SingleLinkedListEnumerator(SingleLinkedList <T> list) { this.list = list; index = -1; currentItem = list.begin; }
public SingleLinkedList() { begin = end = null; _size = 0; }