目录指南
链表
链表的概念及结构
链表的实现
1.打印链表
2.获取单链表的长度
3.头插法
4.尾插法
5.任意位置输入。第一个数据节点为0号下标
6.查看链表中是否包含关键字key
7.删除第一次出现的关键字为key的节点
8.删除所以值为key的节点
9.清空链表
链表的概念及结构
链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。
实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:
1.单向、双向
2.带头、不带头
3.循环、非循环
单链表,双向链表
虽然有这么多的链表的结构,但是我们重点掌握两种
无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈 希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。
链表的实现
在我们实现链表的接口功能前,我们要先创建两个类,链表类(包含有一个可变的头结点和实现各种功能的接口)和节点类(包含成员属性value和next)
下面所写的接口的功能均在链表类中实现
1.打印链表
2.获取单链表的长度
引用局部变量cur来遍历链表,并引用一个局部变量count来计数,只要节点不为null,那么count就+1,最后返回的count值就是链表长度了。
3.头插法
所谓头插法就是将一个节点插入到头结点的前面。首先我们要先判断一下头结点是否为空,如果为空的话,那么所创建的新节点就直接为头结点;如若不为空,则先把头结点的地址存放到新节点的next中,然后把新节点置为头结点。(注意: 切不可乱了顺序!!!)
4.尾插法
尾插法不同与头插法,尾插法第一次是一定要判断链表是否为空的(也就是判断头结点是否为空),若头节点为空,则要插入的节点就是头结点,若不为空,则引入局部变量cur遍历链表找到最后一个节点,当cur.next为空时,说明找到了最后一个节点,然后让cur中的next指向要插入的节点!!!!!
5.任意位置输入。第一个数据节点为0号下标
首先我们需要先判断一下插入位置是否合理,然后我们如果要在任意位置插入一个节点,则必须要先找到插入位置的前一个节点(因为这是单链表,所以无法直接知道),可再写个方法来实现找到要插入位置的前一个节点。
图些许草率,各位看官不好意思哈,小生画画水平实属不太行!...
6.查看链表中是否包含关键字key
传入关键字key,引入局部变量cur遍历链表,如果在遍历过程中遇到和key相同的元素则返回true,否则返回false。
7.删除第一次出现的关键字为key的节点
首先我们要先判断一下链表是否为空(也就是头节点是否为空),其次我们还要看要删除的key节点是否为头节点,若为头节点,则直接将头结点的引用指向下一个节点,下个节点就成为了头节点;若要删除的key节点不为头节点,则将key节点的前一个节点指向key节点的下一个节点
8.删除所以值为key的节点
它的思想和删除第一次出现的key节点类似,那个是找到一个要删除的节点就直接跳出循环并返回;而这个是遍历整个链表,直到找到所有要删除的key值后才跳出循环。
9.清空链表
首先引用变量curNext来保存头结点的下一个节点,如果不保存的话,那么当将头结点的next置为空时,将找不到头结点的下个节点,那么便无法把其他节点都置为空,也就无法清空链表了。
最后的最后来个区别
老铁们给小弟点个赞怎么样?我觉得非常可以!