/*
#include <stdio.h>
#include <windows.h>
#include <string.h>
typedef struct a
{
int data;
struct a* link;
}node;
typedef struct b
{
node* link;
}head;
head* creat()
{
head* L;
L = (head*)malloc(sizeof(head));
L->link = NULL;
return L;
}
void addlnode(head* L, int a)
{
node* n;
node* p;
n = L->link;
n = (node*)malloc(sizeof(node));
n->data = a;
n->link = NULL;
if(L->link == NULL)
{
L->link = n;
}
else
{
p=L->link;
while(p->link!=NULL)
{
p = p->link;
}
p->link = n;
}
return ;
}
void print(head* L)
{
node* p;
p = L->link;
printf("// ");
while(p!=NULL)
{
printf("%d ", p->data);
p = p->link;
Sleep(200);
}
printf("\n");
}
void dellnode(head* L)
{
node* p;
node* n;
p = L->link;
n = L->link;
if(p==NULL)
{
return ;
}
while(p->link!=NULL)
{
p = p->link;
}
while(n->link!=p)
{
n = n->link;
}
p->data = NULL;
free(p);
n->link = NULL;
}
void firstadd(head* L, int a)
{
node* p;
p = (node*)malloc(sizeof(node));
p->link = L->link;
L->link = p;
p->data = a;
}
void firstdel(head* L)
{
node* p;
p = L->link;
p->data = NULL;
L->link = p->link;
free(p);
}
int main()
{
int a,b,c;
head* L = creat();
while(1)
{
printf("1.last_add 2.last_del 3.print \n4.first_add 5.first_del>> ");
scanf("%d",&a);
if(a==1)
{
printf("insert data >>");
scanf("%d",&b);
addlnode(L,b);
}
else if(a==2)
{
dellnode(L);
}
else if(a==3)
{
print(L);
}
else if(a==4)
{
printf("insert data >>");
scanf("%d",&b);
firstadd(L,b);
}
else if(a==5)
{
firstdel(L);
}
}
}
*/
//doubly linked list
#include <stdio.h>
#include <windows.h>
#include <string.h>
typedef struct dn
{
int data;
struct dn* rlink;
struct dn* llink;
}dnode;
typedef struct h
{
dnode* link;
}head;
head* creat()
{
head* L;
L = (head*)malloc(sizeof(head));
L->link = NULL;
return L;
}
void addfnode(head* L, int a)
{
dnode* p = (dnode*)malloc(sizeof(dnode));
p->data = a;
p->llink = L;
p->rlink = NULL;
if(L->link != NULL)
{
p->rlink = L->link;
L->link = p;
p->rlink->llink = p;
}
L->link = p;
}
void delfnode(head* L)
{
dnode* p;
p = L->link;
if(p->rlink == NULL)
{
L->link = NULL;
p->data = NULL;
free(p);
return ;
}
p->data = NULL;
p->rlink->llink = L;
L->link = p->rlink;
free(p);
}
void lookfornode(head* L)
{
}
void printnode(head* L)
{
dnode* p;
p = L->link;
printf("// ");
while(p!=NULL)
{
printf("%d ", p->data);
p = p->rlink;
Sleep(200);
}
printf("\n");
}
int main()
{
int a, b, c;
head* L = creat();
while(1)
{
printf("1.first_add 2.first_del 3.print>> ");
scanf("%d",&a);
if(a==1)
{
printf("insert data >>");
scanf("%d",&b);
addfnode(L, b);
}
else if(a==2)
{
delfnode(L);
}
else if(a==3)
{
printnode(L);
}
}
}