关于c语言链表的自我救赎

版权声明:转载请声明( ̄▽ ̄) https://blog.csdn.net/qq_41079177/article/details/83152626

c语言的链表集合了指针,结构体等概念,

因为上课没有好好听加上指针概念全部都遗忘了只能靠自己重新学习了,那么我们来分析一下,正向建立链表时每步的意义

struct node
{
    int data;
    struct node *next;
};

定义了一个结构体,其中:struct node *next  虽然结构体中不允许重新调用自己,但是可以调用一个指向自己结构类型的指针,所以next作为指向的指针存在;

int main()
{
    int i,n;
    struct node *head,*p,*tail;
    head=(struct node*)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        p=(struct node*)malloc(sizeof(struct node));
        scanf("%d",&p->data);
        p->next=NULL;
        tail->next=p;//第二次的tail->next就是第一次分配了空间的p,tail取代了p一次,因为分配了空间(这就是最重要的点所在,c的指针真是一个坑啊。
        tail=p;//此时tail指向了刚才已经分配完空间的位置了所以下一次的空间
    }
    p=head;
    while(p->next!=NULL)
    {
        printf("%d ",p->next->data);
        p=p->next;
    }
    return 0;
}

重申一遍,c语言指针牛逼!!!

猜你喜欢

转载自blog.csdn.net/qq_41079177/article/details/83152626
今日推荐