//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。为什么第一个程序无法正确运行?是什么原因?
第一个程序的问题是,在输入时,您正在移动链表的标题。因此,当您完成输入操作后,链接列表的头部现在位于链接列表的最后一个节点。然后,当您尝试打印出链接列表时,您将得到它的最后一个节点,因为当您接受最后一个输入时,磁头已移到那里。