单链表尾部插入算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37787043/article/details/79859486
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>

//目的 从链表尾部插入新节点
struct node
{
    int data;   //有效数据
    struct node *pNext;  //指向下一个节点的指针
};

void insert_tail(struct node *pHeader,struct node *new)
{
    struct node *p = pHeader;
    while(NULL != p->pNext)  // 目的是找到最后一个节点,最后一个节点的p指向NULL
    {
        p = p->pNext;
    }

    p->pNext = new;

}

//作用:创建一个链表节点
//返回值:指针指向我们函数新创建的一个节点的首地址
struct node *create_node(int data) //接收参数data
{
    struct node *p = (struct node *)malloc(sizeof(struct node));  //p只是一个局部变量
    if(NULL == p)
    {
        printf("malloc error \n");
        return NULL; // 不是返回-1
    }
        //清理申请的堆内存
        bzero(p,sizeof(struct node));

        //填充节点
        p->data = data;
        p->pNext = NULL; //将来要指向下一个地址的首地址
                         //实际操作时将下一个节点malloc返回的指针赋值给这个节点    
        return p;       //返回指针p 
}

int main(void)
{
    //struct node *pHeader = NULL;  
    struct node *pHeader = create_node(200);
    insert_tail(pHeader,create_node(300));
    insert_tail(pHeader,create_node(400));
    insert_tail(pHeader,create_node(4));

    //访问链表中第一个有效数据
    printf("node1 data:%d\n",pHeader->data);

    //访问链表中第二个有效数据
    printf("node2 data:%d\n",pHeader->pNext->data); 

    //访问链表中第三个有效数据
    printf("node3 data:%d\n",pHeader->pNext->pNext->data);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_37787043/article/details/79859486