基于单向链表做了一些修改,实现双向链表,记录一下
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node* next;
struct node* prev;
};
struct node* creatlist()
{
struct node* headnode = (struct node*)malloc(sizeof(struct node));
headnode->next = NULL;
headnode->prev = NULL;
return headnode;
}
struct node* creatnode(int data)
{
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->next = NULL;
newnode->prev = NULL;
newnode->data = data;
return newnode;
}
void insertnode(struct node* list,int data)
{
struct node* newnode = creatnode(data);
struct node* head = list;
if(head->next == NULL) {
newnode->next = NULL;
newnode->prev = head;
head->next = newnode;
}else{
newnode->next = head->next;
newnode->prev = head;
head->next->prev = newnode;
head->next = newnode;
}
}
void printlist(struct node* list)
{
struct node* pmove = list->next;
if(!pmove)
printf("链表为空\n");
while(pmove != NULL)
{
printf("%d",pmove->data);
pmove = pmove->next;
}
printf("\n");
}
void delnode(struct node* list, int data)
{
struct node* posnode = list->next;
if(posnode == NULL)
printf("链表为空\n");
else {
while(posnode->data != data) {
posnode = posnode->next;
if(posnode == NULL){
printf("找不到对应结点\n");
return;
}
}
if(posnode->next != NULL){
posnode->prev->next = posnode->next;
posnode->next->prev = posnode->prev;
free(posnode);
} else {
posnode->prev->next = NULL;
}
}
}
int main()
{
struct node *list;
list = creatlist();
insertnode(list,6);
insertnode(list,1);
insertnode(list,3);
insertnode(list,4);
printlist(list);
delnode(list,1);
delnode(list,4);
delnode(list,3);
delnode(list,6);
printlist(list);
return 0;
}
输出结果: