单链表构造、插入、打印、逆序实现

数据结构实验之链表二:逆序建立链表 验性质的比赛中查看自己代码的BUG已修复,欢迎继续AC! yxf(yxf) 注销 数据结构实验之链表二:逆序建立链表 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据。 输入 第一 阅读详情

目录

1、构造结点结构体

2、初始化一个带头结点的单链表

3、往链表中插入节点

4、将链表逆序

5、打印节点信息

完整程序:


主程序在下面

1、构造结点结构体

typedef struct linkList
{
	int data;
	struct linkList *next;
}LINKLIST,*list;

  data用于节点存储数据,struct linkList *next是结点的指针域。LINKLIST是结构体的别名,list是结构体的指针。

2、初始化一个带头结点的单链表

//初始化带头结点的单链表
LINKLIST *CreateLinkList(void)
{
	//创建新结点,并为其申请堆内存
	LINKLIST *head = (LINKLIST *)malloc(sizeof(LINKLIST));
	head->data = 0;	//头结点的值初始化为0
	head->next = NULL; //头结点的指针域指向空
	return head;	

}

  创建一个指向头结点的指针,将头结点的值置为0,并且指针域指向空。

3、往链表中插入节点

//将新结点插入单链表
void InsertNode(LINKLIST *current,int n)
{
	LINKLIST *node=NULL;
	for (int i = 1; i <= n; i++)
	{
		//为新插入的结点申请堆内存
		node = (LINKLIST*)malloc(sizeof(LINKLIST));
		//判断
		if (current == NULL || node == NULL)
			return;

		node->data = i;
		node->next = NULL;

		current->next = node;	//当前结点指向新插入的结点
		current = node;			//当前结点变为新插入的结点
	}

}

4、将链表逆序

​
//单链表逆序
void ListReverse(list* head)
{
    if(head==NULL) return;

	//构造一个临时结点来保存q的下一个结点
	LINKLIST *temp = NULL;
	//
	LINKLIST *p = head->next;
	LINKLIST *q = head->next->next;

	//如果只有头结点或者没有头结点就返回
	if (p == NULL || q == NULL)
		return;

	//遍历
	while (q != NULL)
	{
		temp = q->next;		//temp指向q下一个结点
		q->next = p;		//q的指针域指向p
	
		p = q;		//指针p指向q所指的结点
		q = temp;	//指针q指向temp所指的节结点	即将q和q的指向往下偏移一个结点
	}
	//注意:head->next才是头结点,而不是head!head只是指向头结点的指针
	//因为头指针与头结点不同,头结点即第一个结点,头指针是指向第一个结点的指针。
	//链表中可以没有头结点,但不能没有头指针

	//头指针指向的头结点的指针域指向空,头变尾
	head->next->next = NULL;  
	//头结点的指针域指向p即尾结点。p为新的头结点,所以head指向p
	head->next = p;   
	
}

5、打印节点信息

//打印结点序列
void PrintLinkList(list head)
{
	LINKLIST *p = head->next;
	while (p!=NULL)
	{
		cout << p->data<<" ";
		p=p->next;
	}
	cout << endl;
}

  将链表头节点传入,当节点的指针域指向不为空时,输出该节点的值,并将指针指向它的下一个节点。

完整程序:

#include <iostream>

using namespace std;

//构造单链表结构体
typedef struct linkList
{
	int data;
	struct linkList *next;
}LINKLIST,*list;

//初始化带头结点的单链表
LINKLIST *CreateLinkList(void)
{
	//创建新结点,并为其申请堆内存
	LINKLIST *head = (LINKLIST *)malloc(sizeof(LINKLIST));
	head->data = 0;	//头结点的值初始化为0
	head->next = NULL; //头结点的指针域指向空
	return head;	

}

//将新结点插入单链表
void InsertNode(LINKLIST *current,int n)
{
	LINKLIST *node=NULL;
	for (int i = 1; i <= n; i++)
	{
		//为新插入的结点申请堆内存
		node = (LINKLIST*)malloc(sizeof(LINKLIST));
		//判断
		if (current == NULL || node == NULL)
			return;

		node->data = i;
		node->next = NULL;

		current->next = node;	//当前结点指向新插入的结点
		current = node;			//当前结点变为新插入的结点
	}

}

//打印结点序列
void PrintLinkList(list head)
{
	LINKLIST *p = head->next;
	while (p!=NULL)
	{
		cout << p->data<<" ";
		p=p->next;
	}
	cout << endl;
}

//单链表逆序
void ListReverse(list* head)
{
    if(head==NULL) return;    

	//构造一个临时结点来保存q的下一个结点
	LINKLIST *temp = NULL;
	//
	LINKLIST *p = head->next;
	LINKLIST *q = head->next->next;

	//如果只有头结点或者没有头结点就返回
	if (p == NULL || q == NULL)
		return;

	//遍历
	while (q != NULL)
	{
		temp = q->next;		//temp指向q下一个结点
		q->next = p;		//q的指针域指向p
	
		p = q;		//指针p指向q所指的结点
		q = temp;	//指针q指向temp所指的节结点	即将q和q的指向往下偏移一个结点
	}
	//注意:head->next才是头结点,而不是head!head只是指向头结点的指针
	//因为头指针与头结点不同,头结点即第一个结点,头指针是指向第一个结点的指针。
	//链表中可以没有头结点,但不能没有头指针

	//头指针指向的头结点的指针域指向空,头变尾
	head->next->next = NULL;  
	//头结点的指针域指向p即尾结点。p为新的头结点,所以head指向p
	head->next = p;   	
}


int main()
{
	LINKLIST *head = NULL;
	head = CreateLinkList();
	InsertNode(head, 15);
	cout << "逆序前的:";
	PrintLinkList(head);

	cout << "逆序后的:";
	ListReverse(head);
	PrintLinkList(head);

	return 0;
}

输出结果:

因为工作比较忙csdn不是经常上,如果大家有任何疑问或者找我聊技术唠唠嗑,欢迎加我微信a5230gxkd交流,一起进步,我会第一时间回复

或者在公众号领取珍藏电子书(带书签)(有c、c++、python、linux、设计模式等),以及c、c++的面试试题和面试技巧。

lighttools用透镜旋转手动创建菲尼尔透镜 学过很多软件,都没有留下痕迹,很多年之后只记得学过的软件常用的一些功能,稍微难一些的再次用起需要重新学,但如果留下点痕迹,重新再用就会很快。lighttools无意之中接触了,记一点点笔记吧。... 阅读详情

相关推荐

电子纸价签实战:基于SSD1680的墨水屏驱动开发与优化

本文详细介绍了基于SSD1680驱动芯片的电子纸价签开发实战,涵盖硬件连接、驱动框架搭建、核心流程解析及性能优化。重点剖析了初始化配置、波形文件加载、图像数据写入与刷新触发等关键步骤,并提供了功耗优化、显示效果提升及代码健壮性等实用避坑指南,帮助开发者高效实现稳定低功耗的墨水屏驱动。

weixin_28278377的博客 226

数据结构与算法——单链表的逆序

在之前,了解了单链表结点的删除和插入之后,大家会发现这种具有方向性的链表结构中增删结点是相当容易的一件事。要从头到尾输出整个单链表也不难,但是如果要反转过来输出单向链表就需要某些技巧了。单向链表的结点特性就是知道下一个结点的位置,可是却无法得知它上一个结点的位置。因此下面将介绍2中方法来实现单链表的逆序操作。

icc_hhy的博客 2011

麒麟桌面操作系统QT开发环境搭建

麒麟操作系统安装Qt

因为热爱,所以坚持,记录工作中的乐趣 9272

链表逆序的三大方法(Python实现)

链表逆序的三大方法 更多文章代码详情,可以查看博主: GitHub地址:https://github.com/TheAlgorithm-SimpleChinese/Python 个人网站:https://www.iwtmbtly.com 假设给定一个带头结点的单链表,要将其逆序。 即如果单链表原来为head->1->2->3->4->5->6->7,那么逆序后变为 head->7->6->5->4->3->2->1。 有什

qq_43300880的博客 3464

西门子S7-1200/1500 PLC编程与应用技巧

西门子S7-1200 PLC是一款紧凑型的控制器,适用于小型到中型的自动化控制任务。紧凑设计:集成了I/O模块,减少了控制柜的空间需求。高性能:高达25µs的扫描时间,能够快速响应。模块化扩展:支持扩展输入输出模块、通信模块和智能模块,满足不同的应用需求。多种编程语言:支持Ladder图(梯形图)、功能块图(FBD)、结构化文本(ST)等多种编程语言。西门子S7-1200与S7-1500 PLC是强大且灵活的工业控制系统,适用于各种自动化应用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2670

城市规划师必备:ArcMap里用这个免费工具,5步完成建筑群通风廊道分析

本文介绍了城市规划中利用ArcMap进行建筑群通风廊道分析的高效方法,重点讲解了迎风面投影指数(FAI)的应用。通过5个步骤,从数据准备到规划应用,帮助规划师快速评估城市通风潜力,优化建筑布局,提升城市风环境质量。

weixin_26800111的博客 412

C语言--逆序建立链表

C语言--逆序建立链表 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据

m0_73770012的博客 1742

华三(H3C)网络设备配置命令大全与学习指南

本文全面介绍 H3C 网络设备的配置命令,涵盖路由器、交换机、ACL、NAT、VTY、SSH、本地用户、日志、STP、防火墙、QoS 等模块,适合网络工程初学者与运维人员参考。

DreamCollector的博客 6562

链表逆序算法

问题: 给定一个链表,请将其逆序。即如果链表原来为1->2->3->4->5->null,逆序后为5->4->3->2->1->null. 解法1:迭代算法 迭代算法效率较高,但是代码比递归算法略长。递归算法虽然代码量更少,但是难度也稍大,不细心容易写错。 迭代算法的思想就是遍历链表,改变链表节点next指向,遍历完成,链表逆序也就完成了。代码如下: struct node {

__七把刀__ 7418

用一组可复现实验讲清 ABAP 内表 Standard / Sorted / Hashed 的性能差异

摘要(150字): SAP项目中性能问题常源于ABAP内表选型不当。标准表(STANDARD TABLE)写入快但查找慢(线性扫描),适合遍历场景;排序表(SORTED TABLE)保持有序,支持二分查找,适合范围查询;哈希表(HASHED TABLE)基于唯一键实现常数级查找,适合高频精确匹配。实验表明:标准表+BINARY SEARCH需预排序,成本可能高于直接使用排序表;哈希表在键匹配时性能最优。Gateway和RAP场景中,内表选型直接影响接口响应,建议根据读写负载(追加/遍历/精确查找)选择对应类

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 201

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。作为测试环境,本次使用 Registry2 搭建了私有镜像仓库,实际生产环境建议使用 Harbor;创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。

Heartsuit的博客 2461

数据结构和算法(4)之单向链表

学习数据结构和算法的日常Demo 链表介绍 链表是有序的列表,在内存中的存储如下: 构造单链表代码实现: // 定义Node class Node { public int id; public String name; // 这都是数据域信息 public Node next; // 指向下一个节点 public Node(int id, S...

qq_44779506的博客 217

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

Coding... 5499

数据结构中的链表

数据结构中的链表 线性表的链式存储结构称为链表,由于线性表中的每个元素最多只有一个前去元素和一个后继元素,所以当采用链式存储结构时,一种最简单、最长用的方法就是在每个结点中除包含有数据域以外只设置一个指针域,用于指向其后继节点,这样构成的链表称为线性单向链表,简称单链表;另一种可以采用的方法是在每个节点中除包含数值域之外设置两个指针域,分别指向其前驱结点和后继结点,这样构成的链表称为双向链表,若一个结点中的某个指针域不需要指向其他任何结点,则将他的值置为空。用常量null表示。 在线性表的链式存储中,通常每

qq_56299755的博客 825

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Python:链表的逆序

插入法:从链表的第二个节点开始,把遍历到的节点插入到头结点的后面,直到遍历结束 class LNode: def __init__(self): self.data = None self.next = None def Reverse(head): if head == None or head.next == None: ret...

陈小q的博客 580

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【6】单链表【插入,删除,逆序打印】完整代码

面试题6:链表的插入,删除某一结点,从尾到头打印链表 【0】目录: 【1】题目 【2】分析 【3】完整代码及测试用例 【4】测试结果 【1】题目: (1)输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 (2)实现单链表的插入, (3)实现单链表删除某一指定数字(第一次出现的位置) 【2】分析: (1)第一题分析: (1)逆向打印单链表,从前向后遍...

dai_wen的博客 528

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数据结构-单链表的建立,查找,插入,删除,测长,打印,逆置操作实现

若用C++编写,则如下: #include&lt;iostream&gt; using namespace std; //定义节点类; class node { public: int data; node *next; }; //定义单链表类; class Linklist { public: //构造函数 Linklist() { head = new node; hea...

choupiaoyi2794的博客 671

python单向链表逆序_python算法-003单链表逆序插入法

被压抑的情感并不会消失,累积到一定程度后,反而以更丑恶的方式爆发出来,有些精神病就是这样造成的。若是一味压抑,不能把愤懑的情绪加以升华,自我评价将日趋低落。——《高效能人士的七个习惯》这段话告诉我们,心里有事一定要说出来,找人倾诉,或者写出来。或者是bug出多了,会被气炸,甚至砸了这破电脑……我们还是努力学习吧!题目:给定一个带头节点的单链表:head->1->2->3->4->5->6->7->...

weixin_39528366的博客 450

C++手撕单链表及逆序打印

链表是一种线性数据结构,其中每个元素(称为节点)包含数据部分和指向下一个节点的指针。与数组不同,链表的内存空间是动态分配的,因此可以灵活地插入和删除节点,而不需要移动其他元素。单链表是最简单的链表形式,每个节点只有一个指向下一个节点的指针。我们首先定义链表节点的结构。每个节点包含一个整数值和一个指向下一个节点的指针。// 定义链表节点结构int val;// 节点存储的数据// 指向下一个节点的指针// 构造函数接下来,我们定义一个链表类,包含链表的基本操作,如插入、删除和遍历。

weixin_44727517的博客 582

java数据结构和算法——单链表(Linked List)逆序打印单链表(即从尾到头打印单链表,原始链表结构没有变化)的应用示例

一、逆序打印单链表的思路分析示意图: 二、逆序打印单链表的代码示例 1、定义一个人员节点类,每一个PersonNode对象就是一个节点 package com.rf.springboot01.dataStructure.singleLinkedList; /** * @description: 定义一个人员节点类,每一个PersonNode对象就是一个节点 * @author: xiaozhi * @create: 2020-07-15 16:44 */ public class PersonNo

小志的博客 734

python链表逆序教学_python算法-003单链表逆序插入法

被压抑的情感并不会消失,累积到一定程度后,反而以更丑恶的方式爆发出来,有些精神病就是这样造成的。若是一味压抑,不能把愤懑的情绪加以升华,自我评价将日趋低落。——《高效能人士的七个习惯》这段话告诉我们,心里有事一定要说出来,找人倾诉,或者写出来。或者是bug出多了,会被气炸,甚至砸了这破电脑……我们还是努力学习吧!题目:给定一个带头节点的单链表:head->1->2->3->...

weixin_39572316的博客 421

单链表介绍及代码实现(Java)

1 链表介绍 链表是有序的列表,但是它在内存中的实际存储方式如下: 链表是以节点的方式来存储,是链式存储。 每个节点包含 data 域, next 域:指向下一个节点。 如图:发现链表的各个节点不一定是连续存储。 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。 单链表(带头结点) 逻辑结构示意图如下 2 单链表的分析思路及代码实现 2.1单向链表的创建与添加: 以下代码使用带head头的单向链表实现 –水浒英雄排行榜管理,通过完成对英雄人物的增删改查操作,展示单链表的

代码之美 2412

如何实现链表的逆序打印之插入法(带头结点)

本篇采用“插入法”来解决这个问题 先给出链表结构: public class LNode { int data; LNode next; } 插入法就是从链表的第二个节点开始,依次插入到head头的下一个引用上,并把第一个节点作为整个链表的尾部,即将它的下一个节点引用设置为null. 具体操作如下,假如我们有head->1->2->3->4->5这样...

qty4505861的博客 457

链表创建,单链表反转,逆序打印等等

关于单链表以及搜集的一些面试题关于单链表的面试题 链表是以节点的方式来存储 每个节点都包含一个data域和next域,data域用来存放数据,next域用来指向下一个节点 链表的各个节点不一定是连续存储的 先来看普通链表的代码是如何创建的 首先需要一个节点类,命名为Node,这里的属性我设置的为public,如果有序要也可以设置为private,并提供响应的getter和setter方法即可...

qq_44743554的博客 305

Java数据结构:单链表的实现与面试题汇总(带头节点与不带头节点的两种方式的链表实现)

本文介绍了单链表,并使用Java语言实现了单链表的基本功能。最后,列举了新浪、腾讯和百度的有关单链表的面试题,例如:单链表的反转、逆序打印、倒数k个元素等。

黄小黄的博客 1047

java实现单链表的初始化

引子 做了牛客网上的《剑指offer》第三题 ,发现对单链表的构建不太了解。因为牛客网上并未要求实现main函数,单链表的构建是后台进行的。故想自己写个main来完整地实现功能。 题目描述: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 代码区的格式为: 定义了一个ListNode,即链表的结点类; 实现printListFromTailToHead函数,并且...

藓类少女的博客 5955
上一篇: 冒泡排序算法优化
下一篇: 二分查找法
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值