此代码是Stack Using Double Linked列表。除了一个条件之外,此代码工作正常,即每当删除最后一个节点时,它显示“分段错误”错误!
#include<stdio.h>
#include<stdlib.h>
typedef struct node_type{
int value;
struct node_type *next, *prev;
}node;
node *insert(int value, node *top){
node *p;
p = (node*)malloc(sizeof(node));
if(top == NULL){
top = p;
p -> value = value;
p -> next = NULL;
p -> prev = NULL;
return top;
}
else{
p -> value = value;
p -> next = top;
p -> prev = NULL;
top -> prev = p;
top = p;
return top;
}
}
node *del(node *top){
node *temp;
if(top == NULL){
printf("Stack is empty\n");
}
else{
temp = top;
top = top -> next;
top -> prev = NULL;
free(temp);
}
return top;
}
node *disp(node *top){
if(top == NULL){
printf("Stack is empty\n");
}
else{
while(top != NULL){
printf("The value is: %d\n", top -> value);
top = top->next;
}
}
}
int main(){
int value, ch = 0;
node *top = NULL;
while( ch != 4){
printf("------> 1. Insert <-------\n");
printf("------> 2. Delete <-------\n");
printf("------> 3. Display <-------\n");
printf("------> 4. Exit <-------\n");
printf("Enter the choice\n");
scanf("%d",&ch);
switch(ch){
case 1:
printf("Enter the value\n");
scanf("%d",&value);
top = insert(value, top);
break;
case 2:
printf("Removing the element\n");
top = del(top);
break;
case 3:
disp(top);
break;
case 4:
exit(0);
break;
default:
printf("Wrong Choice\n");
break;
}
}
return 0;
}
答案 0 :(得分:2)
删除链表的最后一个节点是一种特殊情况,您需要特殊的代码来处理它。
答案 1 :(得分:0)
你的del函数存在问题。如果它是最后一个节点top-&gt; next将是NULL。 在你的代码中
top = top-&gt; next;
使顶部为NULL。然后你正在尝试
top-&gt; prev = NULL;
等于取消引用NULL指针,这就是问题所在。 你必须在其他方面处理这个问题。 喜欢
if(top-&gt; next == NULL) 免费顶部;
那将解决问题。