gpt4 book ai didi

c - 删除循环链表中的一个元素 C

转载 作者:行者123 更新时间:2023-11-30 16:31:42 24 4
gpt4 key购买 nike

我的代码有问题。我想从循环列表中删除一个元素,我做到了,但我的问题是,我不再看到该数字,而是在我删除的数字的相同位置看到了 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;
}

谢谢。

最佳答案

您的解决方案尚未得到充分分析。有几点需要注意

1 - 循环列表是一个简单列表,其中最后一个元素指向第一个元素。这意味着在列表中跟踪第一个和最后一个节点非常重要,因为删除此位置的项目将以不同的方式处理。

2 - 如果您的列表包含多个具有相同值的节点,您会消除您看到的第一个节点还是给定数字的每个实例。

3 - 要删除节点,您需要引用其之前的节点。您将前一个节点的 *next 引用指向要删除的节点的 *next 引用。

4 - 我建议使用 k=null

,而不是使用函数 free(k)

查看您的解决方案,如果您还有其他问题,我很乐意为您提供帮助。

关于c - 删除循环链表中的一个元素 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50452452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com