0

这就是我的程序的样子,但它不打印最后输入的仅节点数据的完整列表。我不明白链接有什么问题:

节点的基本结构

    struct node
    {
        int data;
        struct node *link;
    };

将标题定义为链接列表的开头:

    struct node *header;

插入和打印功能:

    void insertFront_sl();
    void print_sl();

主要功能:

    void main()
    {
    clrscr();
    header=(struct node *)malloc(sizeof(struct node));
    header->link=NULL;
    header->data=NULL;
    insertFront_sl();
    insertFront_sl();
    insertFront_sl();
    insertFront_sl();
    print_sl();
    getch();
    }


    void insertFront_sl(){
    struct node *temp;
    int x;
    temp=(struct node *)malloc(sizeof(struct node));
    if(temp==NULL)
    {
    printf("\nMeM0rY Insufficient ..");
    }
    else
    {
        printf("\nGot New Node \nNow Insert Data Into Node : ");
    scanf("%d",&x);


    temp->data=x;
    header->link=temp;


    }

    }

    void print_sl(){
    struct node *ptr;
    ptr=header;
    while(ptr->link !=NULL)
    {
        ptr=ptr->link;
        printf("%d\t",ptr->data);
    }


    }
4

4 回答 4

2

header->link=temp;丢弃列表的尾部。它应该是:

temp->link = header;
header = temp;
于 2013-07-31T15:36:55.157 回答
1

每次创建新节点时,都会丢失对先前创建的节点的引用。添加新节点后:

header->link=temp;

您需要将列表的头部设置为新节点:

header = temp;

您还应该保留一个节点作为对列表基(第一个节点)的引用,并使用此基作为打印列表的起点。

于 2013-07-31T15:45:12.187 回答
0

这就是我的程序的方式,但它不会打印最后输入的仅节点数据的完整列表。

header->link=temp;

问题是您总是将新元素添加到当前节点本身。您正在丢失对之前添加的节点的引用并导致内存泄漏。

于 2013-07-31T15:36:59.507 回答
0

问题在于链接。每次插入时,都会使标头节点中的指针指向最新的链接,这会覆盖旧的指针值(指向前一个新链接)。相反,您需要确保在使标头引用 temp 之前将 temp->link 设置为先前的“新”链接。

于 2013-07-31T15:38:09.573 回答