链接列表 - 在末尾插入节点

时间:2017-06-15 14:52:39

标签: c data-structures linked-list

此代码有什么问题。在插入操作期间,插入第二个元素时,程序停止,Windows显示程序已停止工作。在构建日志中,它显示Process terminated with status -1073741510,有时显示Process terminated with status 255。即使主函数中有返回语句。

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

void insert(int);
void print();
struct node
{
    int data;
    struct node *link;
};
struct node *temp, *temp1, *temp2, *head, *end;
int main()
{
    int i, ch, a;

    head = NULL;
    temp = (node*)malloc(sizeof(node));
    printf("Enter the number of items");
    scanf("%d", &ch);
    for(i = 0; i < ch; i++)
    {
        printf("\nEnter the number");
        scanf("%d", &a);
        insert(a);
        **call to insert**
        print();
    }
    return 0;
}

void insert(int x)
{
    temp = (node*)malloc(sizeof(struct node));
    temp->data = x;
    temp->link = NULL;
    temp2 = head;
    if(head == NULL)
    {
        head = temp;
    }

    else
    {
        while(temp2 != NULL)
        {
            temp2 = temp2->link;
        }
        temp2->link = temp;
    }
}

void print()
{
    temp1 = head;
    printf("\nthe list is:");
    while(temp1 != NULL)
    {
        printf("%d", temp1->data);
        temp1 = temp1->link;
    }
}

1 个答案:

答案 0 :(得分:-1)

这部分功能

else
{
    while(temp2 != NULL)
    {
        temp2 = temp2->link;
    }
    temp2->link = temp;
}

错了。退出循环后,节点temp2等于NULL。因此这句话

    temp2->link = temp;

导致未定义的行为。

按以下方式更改代码段

else
{
    while(temp2->link != NULL)
    {
        temp2 = temp2->link;
    }
    temp2->link = temp;
}

也是主要

中的这个陈述
temp = (node*)malloc(sizeof(node));

没有意义,导致内存泄漏。

除变量head

之外的全局变量的这些声明
struct node *temp, *temp1, *temp2, *head, *end;

也没有意义。