#include <iostream>
#include <cstring>
struct Student {
int id;
char* name;
Student* next;
Student* prev;
};
Student* createStudent(const int id, const char* name, Student* pNext, Student* pPrev) {
struct Student* pStudent = new Student;
pStudent->id = id;
pStudent->name = new char[strlen(name)];
strcpy(pStudent->name, name);
pStudent->next = pNext;
pStudent->prev = pPrev;
return pStudent;
}
Student* getLast(Student* pCurrent) {
while(pCurrent->next != NULL) {
pCurrent = pCurrent->next;
}
return pCurrent;
}
void insertFirst(Student*& pHead, const int id, const char* name) {
if(pHead == NULL) {
pHead = createStudent(id, name, NULL, NULL);
} else {
pHead = createStudent(id, name, pHead, NULL);
pHead->next->prev = pHead;
}
}
void append(Student*& pHead, const int id, const char* name){
if(pHead == NULL) {
pHead = createStudent(id, name, NULL, NULL);
} else {
struct Student* pCurrent = pHead;
while(pCurrent->next != NULL) {
pCurrent = pCurrent->next;
}
pCurrent->next = createStudent(id, name, NULL, pCurrent);
}
}
void printItem(Student* pItem) {
if (pItem == NULL) {
std::cout << "addr: NULL;" << std::endl;
} else {
std::cout << "addr:" << pItem << "; next:"
<< pItem->next << "; prev:"
<< pItem->prev << "; id:"
<< pItem->id << "; name:"
<< pItem->name << ";" << std::endl;
}
}
int main() {
Student* pHead = NULL;
append(pHead, 10, "Hello0");
append(pHead, 11, "Hello1");
append(pHead, 11, "Hello2");
insertFirst(pHead, 10, "Hello-1");
Student* pCurrent = pHead;
while (pCurrent != NULL) {
printItem(pCurrent);
pCurrent = pCurrent->next;
}
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCnN0cnVjdCBTdHVkZW50IHsKICBpbnQgaWQ7CiAgY2hhciogbmFtZTsKICBTdHVkZW50KiBuZXh0OwogIFN0dWRlbnQqIHByZXY7Cn07IAoKU3R1ZGVudCogY3JlYXRlU3R1ZGVudChjb25zdCBpbnQgaWQsIGNvbnN0IGNoYXIqIG5hbWUsIFN0dWRlbnQqIHBOZXh0LCBTdHVkZW50KiBwUHJldikgewogIHN0cnVjdCBTdHVkZW50KiBwU3R1ZGVudCA9IG5ldyBTdHVkZW50OwogIHBTdHVkZW50LT5pZCA9IGlkOwogIHBTdHVkZW50LT5uYW1lID0gbmV3IGNoYXJbc3RybGVuKG5hbWUpXTsKICBzdHJjcHkocFN0dWRlbnQtPm5hbWUsIG5hbWUpOwogIHBTdHVkZW50LT5uZXh0ID0gcE5leHQ7CiAgcFN0dWRlbnQtPnByZXYgPSBwUHJldjsKICByZXR1cm4gcFN0dWRlbnQ7Cn0KClN0dWRlbnQqIGdldExhc3QoU3R1ZGVudCogcEN1cnJlbnQpIHsKICAgIHdoaWxlKHBDdXJyZW50LT5uZXh0ICE9IE5VTEwpIHsKICAgICAgcEN1cnJlbnQgPSBwQ3VycmVudC0+bmV4dDsKICAgIH0KCXJldHVybiBwQ3VycmVudDsKfQoKdm9pZCBpbnNlcnRGaXJzdChTdHVkZW50KiYgcEhlYWQsIGNvbnN0IGludCBpZCwgY29uc3QgY2hhciogbmFtZSkgewogIGlmKHBIZWFkID09IE5VTEwpIHsKICAgICAgcEhlYWQgPSBjcmVhdGVTdHVkZW50KGlkLCBuYW1lLCBOVUxMLCBOVUxMKTsKICB9IGVsc2UgewogICAgICBwSGVhZCA9IGNyZWF0ZVN0dWRlbnQoaWQsIG5hbWUsIHBIZWFkLCBOVUxMKTsKICAgICAgcEhlYWQtPm5leHQtPnByZXYgPSBwSGVhZDsKICB9Cn0KCnZvaWQgYXBwZW5kKFN0dWRlbnQqJiBwSGVhZCwgY29uc3QgaW50IGlkLCBjb25zdCBjaGFyKiBuYW1lKXsKICBpZihwSGVhZCA9PSBOVUxMKSB7CiAgICBwSGVhZCA9IGNyZWF0ZVN0dWRlbnQoaWQsIG5hbWUsIE5VTEwsIE5VTEwpOwogIH0gZWxzZSB7CiAgICBzdHJ1Y3QgU3R1ZGVudCogcEN1cnJlbnQgPSBwSGVhZDsKICAgIHdoaWxlKHBDdXJyZW50LT5uZXh0ICE9IE5VTEwpIHsKICAgICAgcEN1cnJlbnQgPSBwQ3VycmVudC0+bmV4dDsKICAgIH0KCiAgICBwQ3VycmVudC0+bmV4dCA9IGNyZWF0ZVN0dWRlbnQoaWQsIG5hbWUsIE5VTEwsIHBDdXJyZW50KTsKICB9Cn0KCnZvaWQgcHJpbnRJdGVtKFN0dWRlbnQqIHBJdGVtKSB7CglpZiAocEl0ZW0gPT0gTlVMTCkgewoJCXN0ZDo6Y291dCA8PCAiYWRkcjogTlVMTDsiIDw8IHN0ZDo6ZW5kbDsKCX0gZWxzZSB7CiAgICAJc3RkOjpjb3V0IDw8ICJhZGRyOiIgPDwgcEl0ZW0gPDwgIjsgbmV4dDoiCgkgICAgCSAgICAgIDw8IHBJdGVtLT5uZXh0IDw8ICI7IHByZXY6IgoJCSAgICAgICAgICA8PCBwSXRlbS0+cHJldiA8PCAiOyBpZDoiCgkJICAgICAgICAgIDw8IHBJdGVtLT5pZCA8PCAiOyBuYW1lOiIKCQkgICAgICAgICAgPDwgcEl0ZW0tPm5hbWUgPDwgIjsiIDw8IHN0ZDo6ZW5kbDsKCX0KfQoKaW50IG1haW4oKSB7CglTdHVkZW50KiBwSGVhZCA9IE5VTEw7CglhcHBlbmQocEhlYWQsIDEwLCAiSGVsbG8wIik7CglhcHBlbmQocEhlYWQsIDExLCAiSGVsbG8xIik7CglhcHBlbmQocEhlYWQsIDExLCAiSGVsbG8yIik7CglpbnNlcnRGaXJzdChwSGVhZCwgMTAsICJIZWxsby0xIik7CgoJU3R1ZGVudCogcEN1cnJlbnQgPSBwSGVhZDsKCXdoaWxlIChwQ3VycmVudCAhPSBOVUxMKSB7CgkJcHJpbnRJdGVtKHBDdXJyZW50KTsKCQlwQ3VycmVudCA9IHBDdXJyZW50LT5uZXh0OwoJfQoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9