在我的链表程序中,第一次输入的数据没有打印,这是我第一次使用指针指针编写任何程序。如果我以正确的方式使用指针指针,请告诉我。
#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;
}
答案 0 :(得分:0)
您在头部插入节点,因此您不会错过第一个节点,但在打印时不会错过列表中的最后一个节点,因为您测试当前节点之后的节点是否为空:
while (temp->next!=NULL) ...
请注意,如果列表为空,则会失败(或崩溃)。当前节点为null:
temp=head;
while (temp != NULL) {
printf("%d ",temp->i);
temp = temp->next;
}
(请注意,当您在头部插入节点时,当头为空时,您不需要特殊情况;只需将新节点的next
设置为olod头,即null。)