从无头单链表中删除节点

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

 

  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( 0 100 );
 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 

 


 

 

 

 

 

 

转载于:https://www.cnblogs.com/BpLoveGcy/archive/2010/04/01/1702156.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值