我的代码有问题。我想从循环列表中删除一个元素,我做了但我的问题是,我不再看到那个数字,而是在我删除的数字的相同位置看到0(零) 。 有人可以帮帮我吗?问题出在DeleteElement
中 #include<stdio.h>
#include<stdlib.h>
struct nodo{
int info;
struct nodo *next;
};
typedef struct nodo* tlista;
int PrintList(tlista l){
if(l){
tlista pc=l;
do{
printf("%d",l->info);
l=l->next;
}while(l!=pc);
}
}
void DeleteElement(tlista l,int elem){
tlista pc=l;
do{
if(l->info==elem){
tlista k=l;
l=l->next;
free(k);
}else{
l=l->next;
}
}while(pc!=l);
}
int CreateList(tlista *l,int n){
tlista new=(tlista)malloc(sizeof(struct nodo));
if(new){
new->info=n;
if((*l)==NULL){
*l=new;
new->next=new;
}
else{
new->next=(*l)->next;
(*l)->next=new;
}return 1;
}else{return 0;}
}
int main(){
tlista l=NULL; int number;
int NumberInsideTheList; int numbertofind;
int thenumbertodelete; int i=0;
int risult;
printf("How many numbers do you want to insert = ");
scanf("%d",&number);
while(i<number){
printf("Insert a number that you want to insert into the
list \n");
scanf("%d",&NumberInsideTheList);
CreateList(&l,NumberInsideTheList);
i++;
}
printf("\n\n");
printf("number to delete = ");
scanf("%d",&thenumbertodelete);
DeleteElement(l,thenumbertodelete);
printf("\n\n");
PrintList(l);
return 0;
}
谢谢。
答案 0 :(得分:0)
您的解决方案尚未得到充分分析。有几点需要注意,
1 - 循环列表是一个简单的列表,其中最后一个元素指向第一个元素。列表中的方法是跟踪第一个节点和最后一个节点很重要,因为删除此位置的项目将会被不同地处理。
2 - 如果列表包含多个具有相同值的节点,您是否会消除您看到的第一个节点或给定数字的每个实例。
3 - 要删除节点,您需要引用之前的节点。您将前一节点的* next引用指向要删除的节点的* next引用。
4 - 我推荐free(k)
k=null
功能
检查您的解决方案,如果您有其他问题,我很乐意提供帮助。