#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
/* data */
struct Node* pre;
int data;
struct Node* next;
} Node;
Node* initList();
void printList(Node* list);
int length(Node* list);
void insertHead(Node* list, int value);
void insertTail(Node* list, int value);
void insertBefore(Node* list, int value, int index);
void removeIndex(Node* list, int index);
void removeHead(Node* list);
void removeTail(Node* list);
int main(int argc, char const* argv[]) {
Node* list = initList();
insertTail(list,10);
insertTail(list, 11);
insertTail(list, 12);
insertBefore(list,0,1);
//removeIndex(list,1);
/*removeHead(list);
removeTail(list);*/
printList(list);
return 0;
}
Node* initList(){
Node* list = (Node*)malloc(sizeof(Node));
list->pre = NULL;
list->data = 0;
list->next = NULL;
return list;
}
void insertHead(Node* list,int value) {
Node* node = (Node*)malloc(sizeof(Node));
list->data++;
node->pre = list;
node->data = value;
node->next = list->next;
list->next = node;
}
void insertTail(Node* list, int value) {
Node* node = (Node*)malloc(sizeof(Node));
list->data++;
while (list->next)
{
list = list->next;
}
node->pre = list;
node->data = value;
node->next = list->next;
list->next = node;
}
void insertBefore(Node* list, int value, int index) {
if (length(list) - 1 < index) {
return;
}
list->data++;
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
for (int i = 0; i < index; i++) {
list = list->next;
}
node->pre = list;
list->next->pre = node;
if (list->next->next != NULL)
{
node->next = list->next;
}
else
{
node->next = NULL;
}
list->next = node;
}
void insertBehind(Node* list, int value, int index) {
if (length(list) - 1 < index) {
return;
}
list->data++;
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
for (int i = 0; i < index+1; i++) {
list = list->next;
}
node->pre = list;
list->next->pre = node;
if (list->next->next != NULL)
{
node->next = list->next;
}
else
{
node->next = NULL;
}
list->next = node;
}
void removeIndex(Node* list,int index) {
if (length(list)-1<index){
return;
}
list->data--;
for (int i = 0; i < index; i++) {
list = list->next;
}
Node* enwNext = list->next->next;
enwNext->pre = list->next->pre;
free(list->next);
list->next = enwNext;
}
void removeHead(Node* list) {
list->data--;
Node* enwNext = list->next->next;
enwNext->pre = list;
free(list->next);
list->next = enwNext;
}
void removeTail(Node* list) {
list->data--;
int index = length(list);
for (int i = 0; i < index; i++){
list = list->next;
}
free(list->next);
list->next = NULL;
}
// 工具方法
int length(Node* list) {
return list->data;
}
void printList(Node* list) {
if (list->data == 0)
{
printf("List is empty");
return;
}
list = list->next;
printf("[ ");
while (list->next)
{
printf("%d,", list->data);
list = list->next;
}
printf("%d", list->data);
printf(" ]");
}
给自己一个备份