双向链表的插入操作。。。求大神帮忙操作
目前只能在 链表为空的时候插入 小弟新手求大神们帮 看看
#include<stdio.h>
#include<malloc.h>
typedef struct list
{
int value;
struct list *fwd;
struct list *bwd;
}LIST;
LIST *creat()
{
LIST *head,*p1,*p2;
head=(LIST *)malloc(sizeof(LIST ));
scanf("%d",&head->value);
if(head->value!=0)
{
head->fwd = NULL;
head->bwd = NULL;
p2=head;
}
else
{
return NULL;
}
p1=(LIST *)malloc(sizeof(LIST ));
scanf("%d",&p1->value);
while(p1->value!=0) // 输入为0的时候结束
{
p2->fwd=p1;
p1->bwd=p2;
p2=p1;
p1 = (LIST *)malloc(sizeof(LIST ));
scanf("%d",&p1->value );
}
p2->fwd=NULL;
return head;
}
LIST *insert(LIST *head,int m)
{
LIST *s,*p1,*p2,*p3; // s为待插入节点
s = (LIST * )malloc(sizeof(LIST) );
s->value=m;
if(NULL == head) //链表为空直接插入
{
head = s ;
s->bwd = NULL ;
s->fwd = NULL ;
return head;
}
p1=head;
while(p1 != NULL && p1->value>s->value ) //判断移动 p2 记录 p1的位置
{
p2=p1 ;
p1=p1->fwd ;
}
if(p1->value<=s->value)
{
if(head == p1) //插入头节点之后。。
{
p3 = (LIST * )malloc(sizeof(LIST) ); //在头结点后 建一个空节点 用于插入新节点
p3->fwd=head;
head=p3;
head=s;
s->fwd=p1;
s->bwd=NULL;
p1->bwd=s;
}
else // 在链表中部插入 。。。
{
p2->fwd = s;
s->fwd = p1;
s->bwd = p2;
p1->bwd= s;
}
}
p1->fwd=s; //链表的 尾部插入
s->bwd=p1;
s->fwd=NULL;
head->bwd=s;
return head;
}
void print(LIST *head)
{
if(head==NULL)
{
printf("list null\n");
}
while(head!=NULL)
{
printf("%3d",head->value);
head=head->fwd;
}
}
void main()
{
LIST * head;
int m;
printf("please input dlist record\n");
head = creat();
print(head);
scanf("%d",&m);
head=insert(head,m);
print(head);
}