单链表的尾插

复制代码
#include<stdio.h>
#include<malloc.h>
typedef struct list biao;
struct list 
{
    int data;
    biao* next;

}list1;
void dataprint(biao* point)
{
    biao* list1 = point;
    while (list1 != NULL)
    {
        printf("%d->", list1->data);
        list1 = list1->next;
    }
    printf("NULL\n");
}
void frontset(biao** point1, int x)
{
  
    biao* point2 = (biao*)malloc(sizeof(biao));
    if (point2 == NULL)
    {
        printf("error about point2");
        return;
    }
    point2->data = x;
    point2->next =*point1;
    *point1 = point2;
}
void backset(biao*point1,int x)
{
   biao* point2 = point1;
    while ((point2)->next != NULL)
    {
        point2 =(point2)->next;
    }
    biao* point3 = (biao*)malloc(sizeof(list));
    if (point3 == NULL)
    {
        printf("error of point3");
        return;
    }
   
    point2->next = point3;
    
    point3->next = NULL;
    point3->data = x;
}
int main()
{
    biao *good = NULL;
    frontset(&good, 1);
    frontset(&good, 2);
    frontset(&good, 3);
    frontset(&good, 4);
    backset(good, 0);
    dataprint(good);
    return 0;
}

backset函数解析:

1.为什么没有和前插一样采取二级指针?原因很简单,因为前插需要挪动头指针的位置,让它指向由新表块构成的新头,而尾插只是在原来的表块后加入新的表块,没必要也不能移动头指针的位置

2.为什么要用point2来拷贝point1进行操作?因为point1不能动。

3.微操(point2->next!=NULL):我们的思路和头指针一样,要改变倒数第二个表块的next的指向,让它指向我们malloc的空间,所以我们要把头指针指在NULL的前一个表块上 ,如果写成point2!=NULL为判断条件,那么头指针会指向NULL的表块,程序会出错。

4.常规操作,让next指向我们malloc的空间,并为空间中的data赋值,然后让它的next指向NULL

相关推荐
CS创新实验室4 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
阿汤猫6665 小时前
基于OpenCode的Harness架构实战验收指南v3.0 (windows系统)
windows·prompt
8Qi86 小时前
LeetCode 23. 合并 K 个升序链表 —— 小顶堆(PriorityQueue)
数据结构·算法·leetcode·链表·
QiLinkOS6 小时前
《打破“用爱发电”:一种基于 Gitee 与时间戳的开源权益分配机制探索》
c语言·数据结构·c++·科技·算法·gitee·开源
阿汤猫6666 小时前
基于OpenCode的Harness架构实战v2.2(windows系统)
windows·prompt
Boom_Shu8 小时前
长方形的关系
数据结构·c++·算法
xiaoshuaishuai88 小时前
C# AvaloniaUI 资源找不到报错
java·服务器·前端·windows·c#
思麟呀9 小时前
C++11并发编程:call_once一次性执行+atomic原子类型+CAS无锁编程+自旋锁
linux·开发语言·jvm·c++·windows
爱讲故事的9 小时前
操作系统第一讲复习:为什么学习操作系统,以及操作系统到底在做什么?
linux·开发语言·windows·学习·ubuntu·c#
Lsk_Smion9 小时前
力扣实训 _ [543].二叉树的直径 _ [23].合并K个升序列表
数据结构·算法·leetcode