Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a845045

Browse files
authored
Update 5.4.2维护链表尾指针.md
1 parent 3d97f20 commit a845045

File tree

1 file changed

+44
-15
lines changed

1 file changed

+44
-15
lines changed

‎5.4.2维护链表尾指针.md‎

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public:
3030
bool delete_my_new(Element *elem);
3131
Element* GetHead();
3232
Element* GetTail();
33+
int GetHeadValue();
34+
int GetTailValue();
3335
private:
3436
Element* head = nullptr;
3537
Element* tail = nullptr;
@@ -44,6 +46,20 @@ Element* my_list::GetTail(){
4446
return this->tail;
4547
}
4648

49+
int my_list::GetHeadValue(){
50+
if(this->head != nullptr){
51+
return this->head->data;
52+
}
53+
return -1;
54+
}
55+
56+
int my_list::GetTailValue(){
57+
if(this->tail != nullptr){
58+
return this->tail->data;
59+
}
60+
return -1;
61+
}
62+
4763
Element* my_list::GetBeforeEndElement(){
4864
if(this->head == nullptr || this->head == this->tail){
4965
return nullptr;
@@ -92,11 +108,14 @@ bool my_list::delete_my(Element *elem){
92108
}
93109

94110
if(elem == this->head){
95-
this->head = this->head->next;
96111
if(this->head->next == nullptr){
112+
this->head = nullptr;
97113
this->tail = nullptr;
98114
}
99-
delete elem;
115+
else{
116+
this->head = this->head->next;
117+
delete(elem);
118+
}
100119
return true;
101120
}
102121

@@ -105,7 +124,13 @@ bool my_list::delete_my(Element *elem){
105124
if(beforeEnd != nullptr){
106125
beforeEnd->next = nullptr;
107126
this->tail = beforeEnd;
108-
delete elem;
127+
delete(elem);
128+
return true;
129+
}
130+
else{
131+
this->head = nullptr;
132+
this->tail = nullptr;
133+
delete(elem);
109134
return true;
110135
}
111136
}
@@ -123,6 +148,7 @@ bool my_list::delete_my(Element *elem){
123148
return false;
124149
};
125150

151+
// 向头部插入结点
126152
bool my_list::insertAfter(Element *elem, int data){
127153
if(elem == NULL){
128154
Element* e = new Element;
@@ -133,37 +159,40 @@ bool my_list::insertAfter(Element *elem, int data){
133159
this->tail = e;
134160
return true;
135161
}
162+
else{
163+
this->head = e;
164+
return true;
165+
}
136166
}
137167
return false;
138168
}
139169

140170
int main(){
141171
my_list myList;
142-
143-
Element* e1 = new Element;
144-
e1->data = 10;
145-
e1->next = nullptr;
146-
147-
Element* e2 = new Element;
148-
e2->data = 20;
149-
e2->next = nullptr;
150-
151-
myList.insertAfter(nullptr, 5);
152172
myList.insertAfter(nullptr, 1);
173+
myList.insertAfter(nullptr, 2);
174+
myList.insertAfter(nullptr, 3);
175+
myList.insertAfter(nullptr, 4);
176+
std::cout << myList.GetHeadValue() << std::endl;
177+
std::cout << myList.GetTailValue() << std::endl;
153178

154179
// 删除第一个节点
155180
if (myList.delete_my(myList.GetHead())) {
156181
std::cout << "Deleted first element." << std::endl;
157182
} else {
158-
std::cout << "Failed to delete element." << std::endl;
183+
std::cout << "Failed to delete element1." << std::endl;
159184
}
185+
std::cout << myList.GetHeadValue() << std::endl;
186+
std::cout << myList.GetTailValue() << std::endl;
160187

161188
// 删除最后一个节点
162189
if (myList.delete_my(myList.GetTail())) {
163190
std::cout << "Deleted last element." << std::endl;
164191
} else {
165-
std::cout << "Failed to delete element." << std::endl;
192+
std::cout << "Failed to delete element2." << std::endl;
166193
}
194+
std::cout << myList.GetHeadValue() << std::endl;
195+
std::cout << myList.GetTailValue() << std::endl;
167196

168197
return 0;
169198
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /