双向链表插入元素问题
编译通过,程序运行出错,感觉应该是插入元素指针变化那块儿出了问题,但不知道怎么修改
#include<stdio.h>
#include<stdlib.h>
typedef struct dou_link
{
int data;
struct dou_link *front,*next;
}DL;
DL * creat_doublelist(DL *p,int n);//使用尾插法建立双向链表
DL* insert_doublelist(DL *p,int i,int x,int n);//在第i个位置插入新结点,其值为x
int main()
{
DL L;
int n,i,x;
printf("请输入双向链表中元素的个数:");
scanf("%d",&n);
creat_doublelist(&L,n);
printf("输入插入的位置i的值和元素值:");
scanf("%d%d",&i,&x);
insert_doublelist(&L,i,x,n);
return 0;
}
DL * creat_doublelist(DL *p,int n)//使用尾插法建立双向链表实现
{
DL *q,*r;
int i;
p=(DL*)malloc(sizeof(DL));
p->front=p->next=NULL;
q=p;
r=q;
for(i=1;i<=n;i++)
{
q->next=(DL*)malloc(sizeof(DL));
q=q->next;
q->data=rand()/1000;
printf("%5d",q->data);
q->front=r;
r=q;
}
q->next=NULL;
printf("\n");
return p;
}
DL* insert_doublelist(DL *p,int i,int x,int n)//在第i个位置插入新节点实现
{
DL *q,*r;
int j;
q=p;
j=1;
while(j<=i)
{
q=q->next;
j++;
}
r=(DL*)malloc(sizeof(DL));
r->data=x;
if(i==n)
{
r->next=q->next;
r->front=q;
q->next=r;
}
else
{
r->front=q;
r->next=q->next;
q->next->front=r;
q->next=r;
}
return p;
}
[解决办法]
插入的部分,首先要判断指针是否为空,这个很关键的
双向链表插入的时候,如果是在尾部插入只需更新一个结点以及创建一个结点
如果在头部插入也是如此 更新原来的头部结点然后创建一个结点
如果在中间插入,要更新两个结点创建一个结点
[解决办法]
会用debugger么?