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