在我的链表程序中,第一个输入的数据没有被打印出来,这是我第一次使用指向指针的指针制作任何程序。也请告诉我我是否以正确的方式使用了指向指针的指针。
#include<stdio.h>
#include<stdlib.h>
struct node
{
int i;
struct node *next;
};
void arrange(struct node **x_head,struct node **x_temp)
{
(*x_temp)->next=*x_head;
*x_head=*x_temp;
}
int main()
{
struct node *head, *temp;
char c;
printf("Do you want to enter data? Y/N ");
scanf(" %c",&c);
if((c=='Y')||(c=='y'))
{
head=malloc(sizeof(struct node));
printf("Enter your data: ");
scanf(" %d",&head->i);
head->next=NULL;
printf("Do you want to enter data? Y/N ");
scanf(" %c",&c);
}
while((c=='Y')||(c=='y'))
{
temp=malloc(sizeof(struct node));
temp->next=NULL;
printf("Enter your data: ");
scanf(" %d",&temp->i);
arrange(&head,&temp);
printf("Do you want to enter data? Y/N ");
scanf(" %c",&c);
}
temp=head;
while(temp->next!=NULL)
{
printf("%d ",temp->i);
temp=temp->next;
}
return 0;
}
你在头部插入节点,这样你就不会错过第一个节点,而是在打印它时错过列表中的最后一个节点,因为你测试当前节点后面的节点是否为 null:
while (temp->next!=NULL) ...
请注意,如果您的列表为空,这将失败(或崩溃)。将当前节点设置为空:
temp=head;
while (temp != NULL) {
printf("%d ",temp->i);
temp = temp->next;
}
(请注意,当您在头部插入节点时,当头部为空时,您不需要特殊情况;只需将新节点的next
设置为 olod 头,即 null。