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

时间:2016-03-12 15:57:51

标签: c data-structures linked-list

在我的链表程序中,第一次输入的数据没有打印,这是我第一次使用指针指针编写任何程序。如果我以正确的方式使用指针指针,请告诉我。

#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;
}

1 个答案:

答案 0 :(得分:0)

您在头部插入节点,因此您不会错过第一个节点,但在打印时不会错过列表中的最后一个节点,因为您测试当前节点之后的节点是否为空:

         while (temp->next!=NULL) ...

请注意,如果列表为空,则会失败(或崩溃)。当前节点为null:

         temp=head;

         while (temp != NULL) {
             printf("%d ",temp->i);
             temp = temp->next;
         }

(请注意,当您在头部插入节点时,当头为空时,您不需要特殊情况;只需将新节点的next设置为olod头,即null。)