从无头单链表中删除节点

分析,如果定义为纯粹的删除节点;包含节点地址,此题无解;但是如果看链表的本质是存储数据,所以如果从数据角度讲数据删除,可以将代表节点的数据删除或替换时,是可以做的;

 

  1 /*
  2  * Created by BpLoveGcy.cnblogs.com
  3  * Gump Yin
  4  * Date: 2010-4-1
  5  * Time: 12:43
  6  * 
  7  * Version:
  8  * CopyRight:http://BpLoveGcy.cnblogs.com/
  9  */
 10 
 11 using System;
 12 using NUnit.Framework;
 13 
 14 namespace MustKnownDotNet
 15 {
 16     [TestFixture]
 17     public class DeleteNodeFromUnknownLinkList
 18     {
 19         [Test]
 20         public void TestMethod()
 21         {
 22             // TODO: Add your test.
 23             List list = new List();
 24             ListNote p = BuildList(list);
 25             Assert.IsTrue(list.Exists(p.Data));
 26             int pData = (int)p.Data;
 27 
 28             Delete(p);
 29 
 30             Assert.IsFalse(list.Exists(pData));
 31             Assert.IsTrue(list.Exists(p.Data));
 32         }
 33 
 34         public void Delete(ListNote p)
 35         {
 36             p.Data = p.Next.Data;
 37             p.Next = p.Next.Next;
 38         }
 39         /// <summary>
 40         /// The method will return a random note of the new list
 41         /// </summary>
 42         /// <returns></returns>
 43         public ListNote BuildList(List list)
 44         {
 45             for (int i = 0; i <= 100; i++)
 46             {
 47                 list.InsertToHead(i);
 48             }
 49             Random r = new Random();
 50             int data = r.Next(0100);
 51 
 52             ListNote prev = null;
 53             ListNote curr = list.Head;
 54             for (int i = 0; i <= data; i++)
 55             {
 56                 prev = curr;
 57                 curr = curr.Next;
 58             }
 59             return prev;
 60         }
 61     }
 62     public class ListNote
 63     {
 64         public ListNote(object data, ListNote next)
 65         {
 66             this.data = data;
 67             this.next = next;
 68         }
 69 
 70         private object data;
 71         public object Data
 72         {
 73             get { return data; }
 74             set { data = value; }
 75         }
 76 
 77         private ListNote next;
 78         public ListNote Next
 79         {
 80             get { return next; }
 81             set { next = value; }
 82         }
 83 
 84     }
 85     public class List
 86     {
 87         private ListNote head;
 88 
 89         public ListNote Head
 90         {
 91             get { return head; }
 92         }
 93         public List()
 94         { }
 95 
 96         // insert the item to the tail of the list        
 97         public void Append(object data)
 98         {
 99 
100         }
101 
102         public void InsertToHead(object data)
103         {
104             if (data == null)
105                 throw new ArgumentNullException();
106 
107             ListNote note = new ListNote(data, head);
108 
109             head = note;
110         }
111 
112         public bool Exists(object data)
113         {
114             ListNote curr = head;
115             while (curr != null)
116             {
117                 if (curr.Data.Equals(data))
118                     return true;
119                 curr = curr.Next;
120             }
121             return false;
122         }
123     }
124 }
125 

 

 

 

 

ref:http://blog.csdn.net/jeiwt/archive/2009/12/11/4984215.aspx 

 


 

 

 

 

 

 

posted @ 2010-04-01 12:39  Freedom  阅读(272)  评论(0编辑  收藏  举报