简单链表的c语言实现

简单链表的c语言实现,c,linked-list,C,Linked List,我试图打印我的列表超过3次 应该是这样的 A: 5 B: 2 C: 3 A: 6 B: 4 C: 1 A: 7 B: 3 C: 15 A: 5 B: 2 C: 3 A: 6 B: 4 C: 1 但是第三次之后,它崩溃了 请看一下我的代码,并告诉我如何修复它 另外,我可以在第二次/第三次运行时编辑列表的值吗 提前谢谢 #include <stdio.h> #include <stdlib.h> #include <unistd.h&g

我试图打印我的列表超过3次

应该是这样的

A: 5  B: 2 C: 3
A: 6  B: 4 C: 1
A: 7  B: 3 C: 15
A: 5  B: 2 C: 3
A: 6  B: 4 C: 1
但是第三次之后,它崩溃了

请看一下我的代码,并告诉我如何修复它

另外,我可以在第二次/第三次运行时编辑列表的值吗

提前谢谢

   #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    struct list {
            int a,b,c;
            struct list *next;
    };

    struct list *init_list ( int a, int b, int c );
    void list_print( struct list *list );

    struct list *init_list ( int a, int b, int c ){
            struct list *list;
            list = malloc(sizeof(struct list));
            if (list == NULL) {
                    printf("Error: Memory allocation failure.\nTerminating.\n");
                    exit(1);
            }

            list->a = a;
            list->b = b;
            list->c = c;
            list->next = NULL;
            return (list);
    }

    void list_print(struct list *list) {
            int j = 0;
            struct list *list2;
            do {
                            list2 = list;
                            struct list *tmp; 
                            tmp = list;

                            printf("A: %d  B: %d C: %d\n" ,tmp->a, tmp->b, tmp->c);
                            list = list->next;

                            j++;
            } while (j < 4);
    }


    int main (int argc, const char * argv[])
    {
        struct list *linked_list_1, *linked_list_2;
        linked_list_1 = init_list(5, 2, 3);
        linked_list_1->next = init_list(6, 4, 1); linked_list_2 = linked_list_1->next;
        linked_list_2->next = init_list(7, 3, 15); 

        list_print(linked_list_1);

        return 0;
    }
#包括
#包括
#包括
结构列表{
INTA、b、c;
结构列表*下一步;
};
结构列表*init_列表(inta、intb、intc);
作废列表打印(结构列表*列表);
结构列表*初始列表(int a、int b、int c){
结构列表*列表;
list=malloc(sizeof(struct list));
if(list==NULL){
printf(“错误:内存分配失败。\n终止。\n”);
出口(1);
}
列表->a=a;
列表->b=b;
列表->c=c;
列表->下一步=空;
返回(列表);
}
作废列表打印(结构列表*列表){
int j=0;
结构列表*list2;
做{
list2=列表;
结构列表*tmp;
tmp=列表;
printf(“A:%d B:%d C:%d\n”,tmp->A,tmp->B,tmp->C);
列表=列表->下一步;
j++;
}而(j<4);
}
int main(int argc,const char*argv[]
{
结构列表*链表1、*链表2;
链表1=初始链表(5,2,3);
链表1->next=初始链表(6,4,1);链表2=链表1->next;
链接列表2->下一步=初始列表(7,3,15);
列表打印(链接列表1);
返回0;
}

据我所知,您有list1->list2->list3->NULL。
因此,当j=0时,打印列表1,然后移动到列表2。现在j等于1,打印列表2并移动到下一个元素,j=2再次打印并移动到NULL。试图打印空指针的内容会导致程序崩溃,因此根本不使用列表2和tmp:尽管您已为它们分配了列表


但真正的问题是,当列表中只有3项时,你却要了4项。当然,最后一个是空的,会导致崩溃。

我想检索第一个cnicutar说的好的,您必须检查列表的结尾。如果它只打印3次,那是因为列表中没有其他元素。如果要返回到第一个元素,请使最后一个元素的下一个指针指向第一个元素。比如:linked\u list\u 2->next->next=linked\u list\u 1对不起,我不够清楚。。我想在没有其他元素的情况下检索第一个元素