使用c编程的单链列表创建问题

问题描述 投票:0回答:1
//linked_list_1

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

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

int main()
{
    struct list *ll=NULL, *tp=NULL;
    int n=3, i;

    ll=(struct list *)malloc(sizeof(struct list));

    scanf("%d",&ll->data);

    for(i=1; i<n; i++)
    {
        tp=(struct list *)malloc(sizeof(struct list));
        scanf("%d",&tp->data);
        ll->link=tp;
        ll=ll->link;
    }

    ll->link=NULL;

    while(ll)
    {
        printf("\n%d",ll->data);
        ll=ll->link;
    }
}
//linked_list_2

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

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

void linked_list(struct list *,int);

int main()
{
    struct list *ll=NULL;
    int n=3;

    ll=(struct list *)malloc(sizeof(struct list));

    linked_list(ll,n);


    while(ll)
    {
        printf("\n%d",ll->data);
        ll=ll->link;
    }
}

void linked_list(struct list *kk, int n)
{
    struct list *tp=NULL;
    int i;
    scanf("%d",&kk->data);
    for(i=1; i<n; i++)
    {
        tp=(struct list *)malloc(sizeof(struct list));
        scanf("%d",&tp->data);
        kk->link=tp;
        kk=kk->link;
    }
    kk->link=NULL;
}

两个程序都相同,在第二程序的情况下,第二程序是使用用户编写的函数(eg. void linked_list(struct list *kk, int n)在链表中创建的。第一个程序也是链接列表创建,但是没有任何用户编写的功能。第二个程序正常运行,但第一个程序运行不正确。如果两个程序的输入均为2 5 4,则第二程序的输出为2 5 4,而第一程序的输出仅为4。为什么第一个程序无法正确运行?是什么原因?

c linked-list singly-linked-list
1个回答
1
投票

第一个程序的问题是,在输入时,您正在移动链表的标题。因此,当您完成输入操作后,链接列表的头部现在位于链接列表的最后一个节点。然后,当您尝试打印出链接列表时,您将得到它的最后一个节点,因为当您接受最后一个输入时,磁头已移到那里。

© www.soinside.com 2019 - 2024. All rights reserved.