记录自已学习之单链表(尾插)

没想到这几个的链表操作还是有不多人看的,所以这样才让我的有信心继续的写下去,毕竟有了激励才有继续走下去的勇气。写了头插式的链表操作之后就有了写完尾插的想法,没想到还是写了,接下来就是尾插的代码。


//创建链表的小函数
#include <stdio.h>
#include <stdlib.h>


typedef struct node
{
int num;
struct node *pNext;
}Node;


//创建节点函数的声明
Node *create_node(int cnt);
//遍历链表的函数声明
void traverse_node(Node *pH);


//尾插入节点函数
void insert_tail(Node *pH, Node *new);


int main(void)
{
//定义一个头指针,指向第一个节点
Node *pHeader = NULL;

pHeader = (Node *)malloc(sizeof(struct node));
if (NULL == pHeader)
{
printf("malloc failure\n");
return 0;
}


insert_tail(pHeader, create_node(1));
insert_tail(pHeader, create_node(2));
insert_tail(pHeader, create_node(3));
insert_tail(pHeader, create_node(4));
insert_tail(pHeader, create_node(5));
traverse_node(pHeader);


return 0;
}




//创建节点函数
Node *create_node(int cnt)
{
Node *Tmp = NULL;

Tmp = (Node *)malloc(sizeof(struct node));
if (NULL == Tmp)
{
printf("In create_node, malloc failure\n");
return NULL;
}

//将函数的传参赋值,并将pNext指向NULL
Tmp->num = cnt;
Tmp->pNext = NULL;
return Tmp;
}


//遍历链表的节点
void traverse_node(Node *pH)
{
while ( (pH = pH->pNext) != NULL)
{
printf("num = %d\n", pH->num);
}
}


//创建尾插入函数
void insert_tail(Node *pH, Node *new)
{
Node *Ptmp = NULL;
do {
Ptmp = pH;
}
while ((pH = pH->pNext) != NULL);


Ptmp->pNext = new;
}



最后一个函数就是尾插节点的函数,跟头插是一样的变量。但是思路是完全不一样的,尾插是一直遍历节点的,直到到达节点的下一个节点为NULL,尾插需要记录NULL之前的节点,所以我这里是利用了do---while这种循环,因为这里害怕传进来的头指针就是只有头指针而没有节点,所以就是先赋值后判断往后面的节点走。while判断里面的语句是用于往后面的节点走的,Ptmp = pH;这条语句就是用于记录NULL前的节点地址,最后一条语句用于插入新节点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值