C/C++中创建(带头结点、不带头结点的)单链表
2024-08-27 23:46:31
1、带头结点的单链表(推荐使用带头结点的单链表)(采用尾插法)
- 了解单链表中节点的构成
从上图可知,节点包含数据域和指针域,因此,在对节点进行定义时,我们可以如下简单形式地定义:
/* 定义链表 */
typedef struct Node{
int data; // 数据域
struct Node *next; // 指针域(后节点)
// struct Node *next; // 指针域(前节点),这里暂时不考虑双链表表
}Node, *LinkedList;
- 尾插法思想
尾插法的思想其实很简单,通俗来讲就是每创建一个新节点都插到原来链表的后面。
!
Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 带头结点 */
L = Head;
L->next = NULL;
/* 初始赋值 */
for(int i = 0; i < 3; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
L->next = LNew;
LNew->next = NULL;
L = LNew;
}
- 简单的代码
#include <iostream>
using namespace std;
/* 定义链表 */
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkedList;
/* 链表初始化 */
LinkedList LinkedListInit(){
Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 带头结点 */
L = Head;
L->next = NULL;
/* 初始赋值 */
for(int i = 0; i < 10; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
L->next = LNew;
LNew->next = NULL;
L = LNew;
}
/* 返回头结点指针 */
return Head;
}
int main()
{
Node *p;
p = LinkedListInit();
p = p->next;
while(p != NULL){
cout << p->data << ' ';
p = p->next;
}
cout << endl;
return 0;
}
2、不带头结点的单链表(原理与带头结点类似)
- 不带头结点与带头结点的区别
由于不带头结点的单链表第一个节点需要有效,因此,在处理第一个节点时,需要做节点迁移。
Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 不带头结点 */
L = Head = NULL;
/* 初始赋值 */
for(int i = 0; i < 4; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
LNew->next = NULL;
if(L == NULL){
L = Head = LNew;
}else{
L->next = LNew;
}
L = LNew;
}
- 简单的代码
#include <iostream>
using namespace std;
/* 定义链表 */
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkedList;
/* 链表初始化 */
LinkedList LinkedListInit(){
Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 不带头结点 */
L = Head = NULL;
/* 初始赋值 */
for(int i = 0; i < 5; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
LNew->next = NULL;
if(L == NULL){
L = Head = LNew;
}else{
L->next = LNew;
}
L = LNew;
}
/* 返回头结点指针 */
return Head;
}
int main()
{
Node *p;
p = LinkedListInit();
while(p != NULL){
cout << p->data << ' ';
p = p->next;
}
cout << endl;
return 0;
}
最新文章
- css_随笔
- PHP的变量和常量
- nmon--非常棒的LINUX/AIX性能计数器监测和分析工具
- VBA操作单元格
- 解决AutoCAD2010在VS2010上无法命中断点
- Retrofit 2.1 入门
- web安全及防护
- delete all untracked files
- 现代程序设计 homework-07
- MySQL5.6监控表之INNODB_METRICS
- ASP.NET网络爬虫小研究 HtmlAgilityPack基础,爬取数据保存在数据库中再显示再自己的网页中
- Vue中使用Cropper.js裁剪图片
- Django 正向解析与反向解析
- 《剑指offer》第二十二题(链表中倒数第k个结点)
- 【高可用HA】Apache (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy
- php 访问用友u8数据
- underscore.js 分析 第二天
- Qt5.5.1移植到freescale imx6
- 自己动手开发更好用的markdown编辑器-04(实时预览)
- Ubuntu 14.10 配置JDK + J2EE
热门文章
- Call to undefined function Think\C()
- linux系统学习(一)
- (转)走进AngularJs(六) 服务
- Java中的http(网络处理)相关的库:HttpClient,HttpCore(转载)
- 8、Semantic-UI之其他按钮样式
- php 将二维数组批量插入到数据库中
- Android-主题
- [LeetCode 题解]:Gas Station
- Exception has been thrown by the target of an invocation
- 网易严选的wkwebview测试之路