//----交换节点 internal void Swap(DLinkNode <T> a, DLinkNode <T> b) { if (a.Next == b) { if (a.Previous == null && b.Next != null) { a.Next = b.Next; b.Next.Previous = a; b.Previous = null; b.Next = a; a.Previous = b; Head = b; } else if (a.Previous != null && b.Next == null) { b.Next = a; a.Previous.Next = b; b.Previous = a.Previous; a.Next = null; a.Previous = b; Tail = a; } else if (a.Previous == null && b.Next == null) { a.Previous = b; a.Next = null; b.Next = a; b.Previous = null; Head = b; Head = a; } else { a.Next = b.Next; b.Next.Previous = a; DLinkNode <T> c = a.Previous; a.Previous = b; b.Next = a; b.Previous = c; c.Next = b; } } else if (a.Previous == b) { if (b.Previous == null && a.Next != null) { Remove(b); Insert(a, b); Head = a; } else if (b.Previous != null && a.Next == null) { Remove(a); Insert(b.Previous, a); Tail = b; } else if (b.Previous == null && a.Next == null) { Remove(b); AddOnTail(b); Head = a; Tail = b; } else { Remove(b); Insert(a, b); } } else { if (a.Previous == null) { Remove(a); Insert(b, a); Remove(b); AddOnHead(b); Head = b; if (a.Next == null) { Tail = a; } else { } } else if (a.Previous != null && b.Next == null) { DLinkNode <T> c = a.Previous; Remove(a); AddOnTail(a); Remove(b); Insert(c, b); Tail = a; } else if (b.Previous == null) { Remove(b); Insert(a, b); Remove(a); AddOnHead(a); Head = a; if (a.Next == null) { Tail = b; } } else if (b.Previous != null && a.Next == null) { DLinkNode <T> c = b.Previous; Remove(b); AddOnTail(b); Remove(a); Insert(c, a); Tail = b; } else { DLinkNode <T> Previous = a.Previous; Remove(a); Insert(b, a); Remove(b); Insert(Previous, b); } } }