C语言 未打印第一个(输入的)节点



在我的链表程序中,第一个输入的数据没有被打印出来,这是我第一次使用指向指针的指针制作任何程序。也请告诉我我是否以正确的方式使用了指向指针的指针。

#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。

相关内容

  • 没有找到相关文章