C语言-链表的创建头插法和尾插法(有无头节点)

2024-03-06 19:38

本文主要是介绍C语言-链表的创建头插法和尾插法(有无头节点),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 结构声明
    • 1 头插法(有头节点)
    • 2 头插法(无头节点)
    • 3 尾插法(有头节点)
    • 4 尾插法(无头节点)

结构声明

typedef int ElementType;typedef struct Node {ElementType data;struct Node *Next;
} *List;

1 头插法(有头节点)

/* 建立链表 - 头插法 - 有头节点 +------+	     +------+	 +------+	 +------+| head |   =>    |node_1| -> |node_2| -> |node_3| -> NULL+------+	     +------+	 +------+	 +------+\			  /+------+|   p  |+------+*/
List HeadCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p; // 临时指针,用于保存声明的节点List head; // 整个链表的头结点;head = (List)malloc(sizeof(struct Node));head->Next = NULL;head->data = 0; // 头节点的 data 域用于保存链表的长度scanf("%d", &x);while (x != -1) { // 当 x 等于 -1 的时候,停止创建链表p = (List)malloc(sizeof(struct Node));p->data = x;p->Next = head->Next;head->Next = p;head->data++; // 链表的长度加 1scanf("%d", &x); // 读取下一个节点的数据}return head;
}

2 头插法(无头节点)

/*建立链表 - 头插法 - 没有头节点+------+	  +------+	   +------+	   +------+| head | -> |node_1| ->  |node_2| -> |node_3| -> NULL^  	  +------+	  +------+	   +------+	   +------+|+------+|  p   |+------+*/
List HeadCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p;List head;head = NULL;scanf("%d", &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;if (head == NULL) {	// 若第一次创建节点,则将该点设置为头节点head = p;p->Next = NULL;} else { // 若不是第一次创建节点,则直接将新节点接到链表头p->Next = head;head = p;}scanf("%d", &x);}return head;
}

3 尾插法(有头节点)

/* 创建链表 - 尾插法 - 有头节点+------+	+------+	+------+| head | -> |node_1| -> |node_2|   ____+------+	+------+	+------+	  |v+------+ 	  +------+| rear |  ->  |   p  |+------+	  +------+*/
List TailCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p;List head; // 头结点List rear; // 因为尾插法需要在尾部插入,所以要有个指针来保存尾的位置head = (List)malloc(sizeof(struct Node));head->Next = NULL;rear = head; // 链表为空,头和尾指向同一个位置scanf("%d", &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;rear->Next = p;rear = p;}rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULLreturn head;
}

4 尾插法(无头节点)

/* 创建链表 - 尾插法 - 没有头节点 +------+	+------+	+------+|node_1| -> |node_2| -> |node_3| 	____+------+	+------+	+------+	   |v+------+	+------+| rear | ->	|   p  |+------+	+------+*/
List TailCreate(void)
{ElementType  x;List p;List head;List rear;head = NULL;rear = NULL;scanf(%d, &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;if (head == NULL) { // 创建链表的第一个节点head = p;rear = p;p->Next = NULL;} else {rear->Next = p;rear = p;}scanf("%d", &x);}rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULL(尾插法中不要遗漏)return head;
}

这篇关于C语言-链表的创建头插法和尾插法(有无头节点)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/781102

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”