这是我的程序的方式,但它不打印最后输入的完整列表节点的数据。我无法理解链接中的问题是什么:
节点的基本结构
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);
}
}
答案 0 :(得分:2)
header->link=temp;
会丢弃列表的尾部。它应该是:
temp->link = header;
header = temp;
答案 1 :(得分:1)
每次创建新节点时,都会丢失对先前创建的节点的引用。 添加新节点后:
header->link=temp;
您需要将列表的头部设置为新节点:
header = temp;
您还应该将节点作为对列表基础(第一个节点)的引用,并使用此基础作为打印列表的起点。
答案 2 :(得分:0)
这是我的程序的方式,但它不会打印最后输入的完整列表节点的数据。
header->link=temp;
问题是您始终将新元素添加到当前节点本身。您正在丢失对先前添加的节点的引用并导致内存泄漏。
答案 3 :(得分:0)
问题在于链接。每次插入时,都会使标题节点中的指针指向最新的链接,这会覆盖旧指针值(指向上一个新链接)。相反,您需要确保在将标题引用为temp之前将temp->链接设置为上一个“新”链接。