一文搞懂链表结构(单链表、双链表、循环链表、删除、添加、内存结构)

什么是链表?
什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链接的入口节点称为链表的头结点也就是head。

 单链表:

链表1

双链表:

每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。

双链表 既可以向前查询也可以向后查询。

链表2

循环链表:  

循环链表,顾名思义,就是链表首尾相连。循环链表可以用来解决约瑟夫环问题。

链表4 

 

 链表的存储方式:

了解完链表的类型,再来说一说链表在内存中的存储方式。

数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。

链表是通过指针域的指针链接在内存中各个节点。

所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。

链表3

 这个链表起始节点为2, 终止节点为7, 各个节点分布在内存的不同地址空间上,通过指针串联在一起。

删除节点:

只要将C节点的next指针 指向E节点就可以了。

链表-删除节点

添加节点: 

链表-添加节点

与数组对比: 

链表-链表与数据性能对比

链表的定义 :

这里我给出C/C++的定义链表节点方式,如下所示:

// 单链表
struct ListNode {
    int val;  // 节点上存储的元素
    ListNode *next;  // 指向下一个节点的指针
    ListNode(int x) : val(x), next(NULL) {}  // 节点的构造函数
};

猜你喜欢

转载自blog.csdn.net/w20001118/article/details/125964294