internal void InsertNodeToEmptyList(CSharpLinkedListNode <T> node) { head = node; head.next = head; head.prev = head; count++; }
internal void InsertNodeBefore(CSharpLinkedListNode <T> node, CSharpLinkedListNode <T> newNode) { newNode.next = node; newNode.prev = node.prev; node.prev.next = newNode; node.prev = newNode; count++; }
//在某个节点前面插入一个值 public void AddBefore(CSharpLinkedListNode <T> node, CSharpLinkedListNode <T> newNode) { InsertNodeBefore(node, node); //设置头节点 if (node == head) { head = newNode; } }
//访问下一个 public bool MoveNext() { _position++; if (_position == list.count) { return(false); } current = node.item; node = node.next; return(true); }
//在链表开头插入节点(插入到head节点之前) public void AddFirst(CSharpLinkedListNode <T> node) { //空链表 if (head == null) { InsertNodeToEmptyList(node); } else { InsertNodeBefore(head, node); } }
//在链表结尾插入节点 public void AddLast(CSharpLinkedListNode <T> node) { //空链表 if (head == null) { InsertNodeToEmptyList(node); } else { //链表的结尾就是链表head节点的前一个节点 InsertNodeBefore(head, node); } }
public void Remove(CSharpLinkedListNode <T> node) { //链表仅有这个节点 if (node.next == node) { head = null; } else { node.prev.next = node.next; node.next.prev = node.prev; //如果删除的是开头 if (node == head) { head = head.next; } } //干掉node发出来的两根指针,使它成为垃圾 node.Invalidate(); count--; }
//令一个节点成为垃圾 public void Invalidate() { this.prev = null; this.next = null; }
//初始化 public CSharpLinkedListEnumerator(CSharpLinkedList <T> data) { list = data; node = list.head; }
//在某个节点后面插入一个值 public void AddAfter(CSharpLinkedListNode <T> node, CSharpLinkedListNode <T> newNode) { InsertNodeBefore(node.next, newNode); }