void InsertAtN()
{
int get,i;
struct node* temp=(struct node*) malloc(sizeof(node)),*temp1,*temp2;
printf("\nEnter the Position : ");
scanf("%d",&get);
printf("\nEnter the Data : ");
scanf("%d",&temp->data);
if(get==1 || head==NULL)
{
if(head==NULL && get==1)
{
temp->prev=temp->next=NULL;
head=temp;
return;
}
head->prev=temp;
temp->prev=NULL;
temp->next=head;
head=temp;
return;
}
temp1=head;
for(i=0;i<get-2;i++)
{
temp1=temp1->next;
}
temp->next=temp1->next;
temp->prev=temp1;
temp1->next=temp;
temp2=temp->next;
temp2->prev=temp;
}在这里,当我在中间或开始插入一个节点时,它是工作的。但是,当我试图在末尾插入一个节点时,这将使crash..please帮助我走出困境。
发布于 2016-05-24 08:28:05
最后,我调试了我的code..This是帮助男人的最后一个code...Thanks :)
void InsertAtN()
{
int get,i;
struct node* temp=(struct node*) malloc(sizeof(node)),*temp1,*temp2;
printf("\nEnter the Position : ");
scanf("%d",&get);
printf("\nEnter the Data : ");
scanf("%d",&temp->data);
if(get==1 || head==NULL)
{
if(head==NULL && get==1)
{
temp->prev=temp->next=NULL;
head=temp;
return;
}
head->prev=temp;
temp->prev=NULL;
temp->next=head;
head=temp;
return;
}
temp1=head;
for(i=0;i<get-2;i++)
{
temp1=temp1->next;
}
temp->next=temp1->next;
temp->prev=temp1;
temp1->next=temp;
if(temp->next!=NULL)
{
temp2=temp->next;
temp2->prev=temp;
}
}发布于 2016-05-24 08:24:22
不要在最后一行使用temp2->prev=temp,而是编写
if (temp2)
temp2->prev=temp因为在最后一个位置插入时,temp2是NULL。
发布于 2016-05-24 08:25:35
假设只有一个节点。您的for loop无法运行,因此temp1指向第一个节点。那你就做了
temp2=temp->next; //temp2 is NULL
temp2->prev=temp; //NULL->prev当只有一个节点时,您必须处理这个情况,并且尝试在最后插入。
https://stackoverflow.com/questions/37407712
复制相似问题