linked list
载入中...
搜索中...
未找到
LinkedList.h
1#ifndef TEMPLATE_DEMO_HXX
2#define TEMPLATE_DEMO_HXX
3
4#include<iostream>
5
6template<class T>
8{
9public:
10 ListElement() { next = NULL; }//
11 ListElement(T x) { data = x; next = NULL; }
12 T data;//
13 ListElement* next;//the pointer point to next element
14};
15
16template<class T>
18{
19private:
20 unsigned int length;
21 ListElement<T>* lastnode;//last node
22 ListElement<T>* headnode;//head node
23 bool firstInit(ListElement<T>* node);
24public:
25 LinkedList();//
27 unsigned int size();//链表元素的个数
28 void insertTail(T x);//表尾添加元素
29 void traversal();//遍历整个链表并打印
30 bool isEmpty();//判断链表是否为空
31 ListElement<T>* find(T x);//查找第一个值为x的节点,返回节点的地址,找不到返回NULL
32 void remove(T x);//删除第一个值为x的节点
33 void insert(T x, ListElement<T>* p);//在p节点后插入值为x的节点
34 void insertHead(T x);//在链表的头部插入节点
35};
36
38
41template<class T>
43{
44 //node = NULL;
45 lastnode = NULL;
46 headnode = NULL;
47 length = 0;
48}
52template<class T>
54{
55 ListElement<T>* node = headnode;//
56 while (node != NULL)//遍历链表
57 {
59 node = node->next;
60 delete(temp);
61
62 }
63 lastnode = NULL;
64 headnode = NULL;
65 length = 0;
66}
70template<class T>
71unsigned int LinkedList<T>::size() {
72 return length;
73}
74
78template<class T>
80 bool isFistInit = false;
81 if (isEmpty())//When empty, both the head node and last node will point to `node`
82 {
83 headnode = node;
84 lastnode = node;
85 isFistInit = true;
86 }
87 return isFistInit;
88}
89
93template<class T>
95{
97 node->data = x;//
98 if (!firstInit(node)) {
99 lastnode->next = node;//append to last
100 lastnode = node;//node is now the last
101 }
102 ++length;//
103}
104
108template<class T>
110{
111 if (p == NULL) return;
112 ListElement<T>* node = new ListElement<T>();//申请一个新的空间
113 node->data = x;//
114 node->next = p->next;
115 p->next = node;
116 if (node->next == NULL) //This is none node after `node`
117 lastnode = node;
118
119 ++length;
120
121}
122
126template<class T>
128{
130 node->data = x;
131 if (!firstInit(node)) {
132 node->next = headnode;
133 headnode = node;
134 }
135 ++length;
136}
137
141template<class T>
143{
144 ListElement<T>* node = headnode;//
145 while (node != NULL)//
146 {
147 cout << node->data << ends;
148 node = node->next;
149 }
150 cout << endl;
151}
152
156template<class T>
158{
159 return headnode == NULL;
160}
164template<class T>
166{
167 ListElement<T>* node = headnode;//
168 while (node != NULL&&node->data != x)//
169 {
170 node = node->next;
171 }
172 return node;//return a point of node ,or NULL if none find
173}
174
178template<class T>
180{
181 ListElement<T>* temp = headnode;//the temp node point to head
182 if (temp == NULL) return;//return if list is empty
183 if (temp->data == x)//if the head's data is x, delete the head node
184 {
185 headnode = temp->next;//move the head to the next
186 if (temp->next == NULL) lastnode = NULL;//if the next is empty, the last node will also be null
187 delete(temp);//delete head
188 return;
189 }
190 while (temp->next != NULL/*the next is not empty*/&&temp->next->data != x/*the next's data is not x*/)
191 {
192 temp = temp->next;
193 }//when temp->next == NULL or temp->next->data == x ,the loop end
194 if (temp->next == NULL) {//The temp is the last now
195 return;//none found
196 }
197 //find one ,it is temp->next
198 if (temp->next == lastnode)//The one we found is the tail
199 {
200 lastnode = temp;//move last node to temp
201 delete(temp->next);//delete the find one
202 temp->next = NULL;
203 }
204 else//The one we found is not the tail
205 {
206 ListElement<T>* node = temp->next;//a pointer points to the found one
207 //
208 temp->next = node->next;//temp's next now point the found one's next
209 delete(node);//delete the found one
210 node = NULL;
211 }
212 length--;
213}
214
215#endif
Definition LinkedList.h:18
void insert(T x, ListElement< T > *p)
Definition LinkedList.h:109
LinkedList()
Definition LinkedList.h:42
~LinkedList()
Definition LinkedList.h:53
bool isEmpty()
Definition LinkedList.h:157
void insertHead(T x)
Definition LinkedList.h:127
void insertTail(T x)
Definition LinkedList.h:94
ListElement< T > * find(T x)
Definition LinkedList.h:165
void traversal()
Definition LinkedList.h:142
void remove(T x)
Definition LinkedList.h:179
unsigned int size()
Definition LinkedList.h:71
Definition LinkedList.h:8
Definition DoubleLink.h:11