#include <stdio.h>
#include <stdlib.h>
//#include<assert.h>
#define TRUE 1
#define FALSE 0
typedef struct Node {
int data;
struct Node* pre;
struct Node* next;
}Node;
Node* initList() {
Node* L = (Node*)malloc(sizeof(Node));
L->data = 0;
L->pre = NULL;
L->next = NULL;
return L;
}
void headInsert(Node* L, int data)
{
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
if (L->data == 0) {
// 链表为空
node->next = L->next;
node->pre = L;
L->next = node;
}
else {
node->pre = L;
node->next = L->next;
L->next->pre = node;
L->next = node;
}
L->data++;
}
void tailInsert(Node* L, int data) {
Node* n = L;
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
while (n->next){
n = n->next;
}
node->next = n->next;
n->next = node;
node->pre = n;
L->data++;
}
int deleteList(Node* L, int data) {
Node* node = L->next;
//assert(node != NULL);
while (node) {
if (node->data == data) {
if (node->next) {
node->pre->next = node->next;
node->next->pre = node->pre;
}
else {
node->pre->next = node->next;
}
// 这里如果之前申请的大小为Node*,释放指针就会越界
free(node);
L->data--;
return TRUE;
}
node = node->next;
}
return FALSE;
}
void printList(Node* L) {
Node* node= L->next;
while (node) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL");
}
int main()
{
Node* L = initList();
headInsert(L, 1);
headInsert(L, 2);
headInsert(L, 3);
headInsert(L, 4);
tailInsert(L, 9);
tailInsert(L, 8);
tailInsert(L, 7);
deleteList(L, 8);
printList(L);
return 0;
}
数据结构 双链表
于 2023-04-06 00:28:36 首次发布