从循环列表C中删除元素

时间:2018-05-21 15:53:07

标签: c list

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

答案 0 :(得分:0)

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

1 - 循环列表是一个简单的列表,其中最后一个元素指向第一个元素。列表中的方法是跟踪第一个节点和最后一个节点很重要,因为删除此位置的项目将会被不同地处理。

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

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

4 - 我推荐free(k)

而不是使用k=null功能

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