类型定义
#ifndef __DOUBLE_LINKLIST_
#define __DOUBLE_LINKLIST_
#include <stdbool.h>
typedef struct _linklistNode
{
struct _linklistNode *prev,*next;
void *dataPtr;
}linklistNode ;
typedef struct
{
struct _linklistNode *head;
int nodenum;
}doubleLinkList;
void initLinkList(doubleLinkList *linklist);
bool addLinkListNode(doubleLinkList *linklist ,void *nodeData);
bool delLinkListNode(doubleLinkList *linklist ,void *nodeData);
void t1();
#endif // __DOUBLE_LINKLIST_
实现
#include <head.h>
#include "./doubleSideLinklist.h"
void initLinkList(doubleLinkList *linklist)
{
linklist->head=NULL;
linklist->nodenum =0;
}
bool addLinkListNode(doubleLinkList *linklist ,void *nodeData)
{
linklistNode *node =NULL;
linklistNode *head = linklist->head;
node = (linklistNode * )malloc(sizeof(linklistNode));
if(node ==NULL){
perror("malloc error");
return false;
}
node ->dataPtr = nodeData;
if( !(linklist->head ) ){
node->next =node;
node->prev =node;
linklist->head = node;
linklist->nodenum=1;
}
else{
node->next = head;
node->prev = head->prev;
(head->prev)->next = node;
head->prev = node;
linklist->head = node;
linklist->nodenum++;
}
printf("head:%#X,node node addr:%#X, prev %#X,next:%#X\n",
(unsigned int )linklist->head,(unsigned int)node,(unsigned int )node->prev,(unsigned int )node->next);
return true;
}
bool delLinkListNode(doubleLinkList *linklist ,void *nodeData)
{
if((!linklist ) ){
return false;
}
else{
if(linklist->nodenum ==1){
if(linklist->head->dataPtr == nodeData){
free(linklist->head);
initLinkList(linklist);
}
}
else{
linklistNode * start = linklist->head;
int x= linklist->nodenum;
while(x--){
if(start->dataPtr == nodeData){
(start->next)->prev = start->prev;
start->prev->next = start->next;
linklist->nodenum--;
free(start);
break;
}
start = start->next;
}
}
}
return true;
}
void print(doubleLinkList linklist )
{
linklistNode * node = linklist.head;
int x= linklist.nodenum;
for(int i=0;i<x;i++)
{
printf("node [%d] addr:%#X, prev %#X,next:%#X\n",i,
(unsigned int)node,(unsigned int )node->prev,(unsigned int )node->next);
node = node->next;
}
}
//测试程序
void t1()
{
doubleLinkList l;
initLinkList(&l);
addLinkListNode(&l,1);
addLinkListNode(&l,2);
addLinkListNode(&l,3);
print(l);
delLinkListNode(&l,2);
delLinkListNode(&l,1);
print(l);
delLinkListNode(&l,0);
print(l);
}