深入研究链表
一.链表的定义
链表是将一组在存储地址上非顺序、不连续的数据元素,通过指针链接起来从而实现数据元素之间的逻辑关系的线性表。
链式结构的特点:链表存储的数据元素之间的逻辑关系与其存储的地址没有关系,而是用指针来说明。
链表的数据元素的组成部分:指针域和数据域。
指针域用来存放指示数据元素之间的逻辑关系的指针。
数据域用来存放数据信息。
数据元素这种特殊的存储方式称之为结点(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.怎么判断链表有环