只是罗列代码,大家都看的懂
1
//Node.h
2
//By Hafeyang
3
//该程序实现一个节点类
4
//
5
//头文件部分
6
#include <string>
7
#include <iostream>
8
#define null 0
9
using namespace std;
10
11
//类Node的实现
12
class Node
13
{
14
//属性
15
public:
16
string Data; //声名数据为字符串
17
Node * Next; //指向下一个节点
18
19
//方法及其实现
20
public:
21
Node(string data,Node * next) //构造函数1
22
{
23
this->Data=data;
24
this->Next=next;
25
}
26
27
Node() //构造函数2
28
{
29
this->Data="";
30
this->Next=null;
31
}
32
~Node() //析造函数
33
{
34
//cout<<"Node "<<Data<<"Disposed"<<endl;
35
}
36
Dispose() //自定义释放内存函数 ?????
37
{
38
this->Data="";
39
this->Next=null;
40
}
41
};
42
43

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

1
//List .h
2
//By Hafeyang
3
//该类实现类链表
4
#include "Node.h"
5
class List
6
{
7
//属性
8
public:
9
Node * Head; //头节点指针
10
int Length; //List长度
11
12
//方法
13
List()
14
{
15
Length=0;
16
Head=null;
17
}
18
public:
19
int AppendNode(Node * newNode) //在链表的为部添加节点
20
{
21
try
22
{
23
if(Length==0) //长度为零添加第一个节点
24
{
25
Head=newNode;
26
Head->Next=null;
27
}
28
else //在链表尾部添加节点
29
{
30
Node * temp;
31
temp=Head;
32
while(temp->Next!=null)
33
{
34
temp=temp->Next;
35
}
36
temp->Next=newNode;
37
newNode->Next=null;
38
}
39
}
40
catch(
)
41
{
42
cout<<"Append Node "<<newNode->Data<<" Failed!"<<endl;
43
return 0; //返回0 插入失败
44
}
45
Length++;
46
cout<<"Append Node "<<newNode->Data<<" Seccessfully!"<<endl;
47
return 1; //返回1 插入成功
48
}
49
50
void PrintList() //输出所有节点数据
51
{
52
Node * temp=Head;
53
cout<<endl;
54
cout<<"********Print The List Start********"<<endl;
55
while(temp!=null)
56
{
57
cout<<"Node Data:"<<temp->Data<<endl;
58
temp=temp->Next;
59
}
60
cout<<"The Length of the List:"<<Length<<endl;
61
cout<<"********Print The List End**********"<<endl;
62
cout<<endl;
63
}
64
65
66
int DeleteNode(Node * deleteNode)
67
{
68
Node * temp=Head;
69
70
71
if(Head==deleteNode) //删除头节点
72
{
73
return deleteHead();
74
}
75
76
77
while(temp!=null)
78
{
79
if(temp->Next==deleteNode)
80
{
81
break; //找到deleteNode 的前一个节点
82
}
83
temp=temp->Next;
84
}
85
86
if(temp==null) //没有找到该节点
87
{
88
cout<<" Node"<<deleteNode->Data<<" does not exist!"<<endl;
89
return 0; //删除失败 返回0
90
}
91
//此时temp 为deleteNode 的前一个节点
92
temp->Next=deleteNode->Next;
93
94
95
cout<<"Delete Node "<<deleteNode->Data<<" Seccessfully!"<<endl;
96
97
deleteNode->~Node(); //调用析构函数 释放节点
98
Length--;
99
return 1;
100
}
101
102
int deleteHead()
103
{
104
try
105
{
106
Head=Head->Next;
107
cout<<"Delete Head Seccessfully!"<<endl;
108
Length--;
109
110
if(Head!=null)
111
{
112
Head->~Node(); //调用析构函数 释放节点
113
}
114
115
return 1;
116
}
117
catch(
)
118
{
119
cout<<"Delete Head Failed"<<endl;
120
return 0;
121
}
122
}
123
};

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40


41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117


118

119

120

121

122

123

1
2
#include "List.h"
3
void main()
4
{
5
Node newNode1=Node("NodeData1",null);//声名 节点
6
Node newNode2=Node("NodeData2",null);
7
Node newNode3=Node("NodeData3",null);
8
List newList=List(); //声明 链表
9
10
newList.AppendNode(&newNode1);
11
newList.AppendNode(&newNode2);
12
newList.AppendNode(&newNode3);
13
newList.PrintList();
14
15
newList.DeleteNode(&newNode3);
16
newList.PrintList();
17
18
19
newList.DeleteNode(&newNode2);
20
newList.PrintList();
21
22
newList.DeleteNode(&newNode1);
23
newList.PrintList();
24
char a;
25
cin>>a;
26
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
