#include <stdio.h>
#include <stdlib.h>
#include "doublylinklist.h"
void init_list(list_datatype *list) {
list->head = list->tail = NULL;
}
void insert_node(list_datatype *list, int x) {
doubly_node *temperate = (doubly_node*)malloc(sizeof(doubly_node));
temperate->data = x;
if(list->head == NULL) {
list->head = temperate;
temperate->prev = NULL;
list->tail = temperate;
temperate->next = NULL;
} else if (list->tail == NULL){
list->head = temperate;
temperate->prev = NULL;
list->tail = temperate;
temperate->next = NULL;
} else {
//chen dau
temperate->next = list->head;
list->head->prev = temperate;
list->head = temperate;
temperate->prev = NULL;
}
}
// xoa dau
void delete_node(list_datatype *list) {
doubly_node *temperate = list->head;
list->head = temperate->next;
list->head->prev = NULL;
free(temperate);
}
void display(list_datatype list) {
doubly_node *temperate = list.head;
while(temperate!=NULL) {
// printf("%p %d ",temperate, temperate->data);
printf("%d ",temperate->data);
temperate = temperate->next;
}
printf("\n");
}
void display_invert(list_datatype list) {
doubly_node *temperate = list.tail;
while(temperate!=NULL) {
// printf("%p %d ",temperate, temperate->data);
printf("%d ",temperate->data);
temperate = temperate->prev;
}
printf("\n");
}
int main(int argc, char const *argv[])
{
list_datatype list;
init_list(&list);
insert_node(&list,1);
insert_node(&list,2);
insert_node(&list,3);
insert_node(&list,6);
insert_node(&list,7);
insert_node(&list,8);
insert_node(&list,9);
insert_node(&list,10);
display(list);
display_invert(list);
delete_node(&list);
delete_node(&list);
delete_node(&list);
delete_node(&list);
delete_node(&list);
display(list);
display_invert(list);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgImRvdWJseWxpbmtsaXN0LmgiCgp2b2lkIGluaXRfbGlzdChsaXN0X2RhdGF0eXBlICpsaXN0KSB7CglsaXN0LT5oZWFkID0gbGlzdC0+dGFpbCA9IE5VTEw7Cn0gCgp2b2lkIGluc2VydF9ub2RlKGxpc3RfZGF0YXR5cGUgKmxpc3QsIGludCB4KSB7Cglkb3VibHlfbm9kZSAqdGVtcGVyYXRlID0gKGRvdWJseV9ub2RlKiltYWxsb2Moc2l6ZW9mKGRvdWJseV9ub2RlKSk7Cgl0ZW1wZXJhdGUtPmRhdGEgPSB4OwoJaWYobGlzdC0+aGVhZCA9PSBOVUxMKSB7CgkJbGlzdC0+aGVhZCA9IHRlbXBlcmF0ZTsKCQl0ZW1wZXJhdGUtPnByZXYgPSBOVUxMOwoJCWxpc3QtPnRhaWwgPSB0ZW1wZXJhdGU7CgkJdGVtcGVyYXRlLT5uZXh0ID0gTlVMTDsKCX0gZWxzZSBpZiAobGlzdC0+dGFpbCA9PSBOVUxMKXsKCQlsaXN0LT5oZWFkID0gdGVtcGVyYXRlOwoJCXRlbXBlcmF0ZS0+cHJldiA9IE5VTEw7CgkJbGlzdC0+dGFpbCA9IHRlbXBlcmF0ZTsKCQl0ZW1wZXJhdGUtPm5leHQgPSBOVUxMOwoJfSBlbHNlIHsKCQkvL2NoZW4gZGF1CgkJdGVtcGVyYXRlLT5uZXh0ID0gbGlzdC0+aGVhZDsKCQlsaXN0LT5oZWFkLT5wcmV2ID0gdGVtcGVyYXRlOwoJCWxpc3QtPmhlYWQgPSB0ZW1wZXJhdGU7CgkJdGVtcGVyYXRlLT5wcmV2ID0gTlVMTDsKCgl9Cn0KLy8geG9hIGRhdQp2b2lkIGRlbGV0ZV9ub2RlKGxpc3RfZGF0YXR5cGUgKmxpc3QpIHsKCWRvdWJseV9ub2RlICp0ZW1wZXJhdGUgPSBsaXN0LT5oZWFkOwoJbGlzdC0+aGVhZCA9IHRlbXBlcmF0ZS0+bmV4dDsKCWxpc3QtPmhlYWQtPnByZXYgPSBOVUxMOwoJZnJlZSh0ZW1wZXJhdGUpOyAJCn0KCnZvaWQgZGlzcGxheShsaXN0X2RhdGF0eXBlIGxpc3QpIHsKCWRvdWJseV9ub2RlICp0ZW1wZXJhdGUgPSBsaXN0LmhlYWQ7Cgl3aGlsZSh0ZW1wZXJhdGUhPU5VTEwpIHsKCQkvLyBwcmludGYoIiVwICVkICIsdGVtcGVyYXRlLCB0ZW1wZXJhdGUtPmRhdGEpOwoJCXByaW50ZigiJWQgIix0ZW1wZXJhdGUtPmRhdGEpOwoJCXRlbXBlcmF0ZSA9IHRlbXBlcmF0ZS0+bmV4dDsKCX0KCXByaW50ZigiXG4iKTsKfQoKdm9pZCBkaXNwbGF5X2ludmVydChsaXN0X2RhdGF0eXBlIGxpc3QpIHsKCWRvdWJseV9ub2RlICp0ZW1wZXJhdGUgPSBsaXN0LnRhaWw7Cgl3aGlsZSh0ZW1wZXJhdGUhPU5VTEwpIHsKCQkvLyBwcmludGYoIiVwICVkICIsdGVtcGVyYXRlLCB0ZW1wZXJhdGUtPmRhdGEpOwoJCXByaW50ZigiJWQgIix0ZW1wZXJhdGUtPmRhdGEpOwoJCXRlbXBlcmF0ZSA9IHRlbXBlcmF0ZS0+cHJldjsKCX0KCXByaW50ZigiXG4iKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKmFyZ3ZbXSkKewoJbGlzdF9kYXRhdHlwZSBsaXN0OwoJaW5pdF9saXN0KCZsaXN0KTsKCWluc2VydF9ub2RlKCZsaXN0LDEpOwoJaW5zZXJ0X25vZGUoJmxpc3QsMik7CglpbnNlcnRfbm9kZSgmbGlzdCwzKTsKCWluc2VydF9ub2RlKCZsaXN0LDYpOwoJaW5zZXJ0X25vZGUoJmxpc3QsNyk7CglpbnNlcnRfbm9kZSgmbGlzdCw4KTsKCWluc2VydF9ub2RlKCZsaXN0LDkpOwoJaW5zZXJ0X25vZGUoJmxpc3QsMTApOwoJZGlzcGxheShsaXN0KTsKCWRpc3BsYXlfaW52ZXJ0KGxpc3QpOwoJZGVsZXRlX25vZGUoJmxpc3QpOwoJZGVsZXRlX25vZGUoJmxpc3QpOwoJZGVsZXRlX25vZGUoJmxpc3QpOwoJZGVsZXRlX25vZGUoJmxpc3QpOwoJZGVsZXRlX25vZGUoJmxpc3QpOwoJZGlzcGxheShsaXN0KTsKCWRpc3BsYXlfaW52ZXJ0KGxpc3QpOwoJcmV0dXJuIDA7Cn0=