#region 在O(1)时间删除指定链表结点 /// <summary> /// 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。 /// </summary> /// <typeparam name="T"></typeparam> class MyList<T> where T:IComparable { private T _data; private MyList<T> _next; public T data { get { return _data; } set { _data = value; } } public MyList<T> next { get { return _next; } set { _next = value; } } public MyList() { data = default(T); next = null; } public MyList(T nodevalue) { data = nodevalue; next = null; } public void Insert(MyList<T> head,MyList<T> node) { if (head == null) { head = new MyList<T>(); head = node; } else { node.next = head.next; head.next = node; } } public void Insert(MyList<T> head, T nodevalue) { MyList<T> temp = new MyList<T>(nodevalue); if (head == null) { head = temp; } else { temp.next = head.next; head.next = temp; } } public void Delete(MyList<T> head, MyList<T> deleteNode) { if ((deleteNode==null)||(head==null)) return; if (deleteNode == head) { head = null; deleteNode = null; } else if (deleteNode.next == null) { MyList<T> pNode = new MyList<T>(); pNode = head; while (pNode.next != deleteNode) pNode = pNode.next; pNode.next = null; deleteNode = null; } else { MyList<T> pNext = new MyList<T>(); pNext = deleteNode.next; deleteNode.data = pNext.data; deleteNode.next = pNext.next; pNext = null; } } public void Print(MyList<T> head) { MyList<T> pNode = head; while (pNode != null) { Console.Write(pNode.data + " "); pNode = pNode.next; } Console.WriteLine(); } } #endregion class Test{ public void MyListTest() { MyList<int> head = new MyList<int>(1); head.Insert(head,2); MyList<int> WishDelete = new MyList<int>(4); head.Insert(head, WishDelete); head.Insert(head,3); head.Print(head); head.Delete(head,WishDelete); head.Print(head); } } class Program { static void Main(string[] args) { Test t = new Test(); t.MyListTest(); } }