深入研究链表

一.链表的定义

链表是将一组在存储地址上非顺序不连续的数据元素,通过指针链接起来从而实现数据元素之间的逻辑关系的线性表

链式结构的特点:链表存储的数据元素之间的逻辑关系与其存储的地址没有关系,而是用指针来说明

链表的数据元素的组成部分:指针域数据域

指针域用来存放指示数据元素之间的逻辑关系的指针

数据域用来存放数据信息

数据元素这种特殊的存储方式称之为结点(Node)

画的示意图如下:

注:https://www.cnblogs.com/ljangle/p/13036992.html

C++中如何判断链表为空

链表区分带头节点和不带头结点两种。假定链表节点指向下一节点的指针变量名为next。那么区分情况,判断空链表的方法为:

1 带头节点。
对于带头节点的链表,存在有不变的头结点head,这个节点并不保存任何数据,仅提供链表起始的一个标识。对于此类链表,判断为空的条件为head->next==NULL。当head的next值为NULL,这时链表为空。

2 不带头结点。
不带头结点的情况,链表的起始节点是可能变化的,但无论如何变化,必须有一个节点指针类型的变量保存实际上的第一个节点first。
当first为空时,链表即为空。这时判断为空的条件为first==NULL。

二.用编程语言实现链表

数据结构单链表头插法和尾插法是什么意思?

头插法: 头插法的实现相对简单 思路是将新形成的节点的下一个赋值为header

               再把新形成的节点地址传给header即将header向前移动

1.

头插法是新增节点总是插在头部,以带头结点链表为例,链表头指针是Head,新增节点p
那么
p->next = Head->next;
Head->next = p;
如果是不带头结点的链表那么对应是
p->next = Head;
Head = p;

 头插法创建链表的根本在于深刻理解最后两条语句

 1 node->next = head->next; // 将头指针所指向的下一个结点的地址,赋给新创建结点的next

 2 head->next = node; // 将新创建的结点的地址赋给头指针的下一个结点 

2.怎么实现链表翻转

单链表翻转很容易理解,例如:

输入: NODE1->NODE2->NODE3->NODE4->NODE5->NULL

输出: NODE5->NODE4->NODE3->NODE2->NODE1->NULL

3.怎么判断链表有环

原文地址:https://www.cnblogs.com/nh34546/p/14171615.html