c语言中的简单链表实现



我试图打印我的列表超过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

但是在第三次之后,它崩溃了…

请看看我的代码并告诉我如何修复它。

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

提前感谢,

   #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: %dn" ,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;
    }

据我所知,您有list1->list2->list3->NULL。因此,当j = 0时,打印list1,然后移动到list2。j现在等于1,您打印list2并移动到下一个元素,j = 2您再次打印并移动到NULL。试图打印NULL指针的内容会导致程序崩溃

list2和TMP根本不使用:尽管您已经为它们分配了list。

但真正的问题是,你要求从一个只有3个项目的列表中获得4个项目。当然最后一个是NULL,会导致崩溃。

相关内容

  • 没有找到相关文章

最新更新