[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解

目录指南

链表

      链表的概念及结构

      链表的实现

         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置为空时,将找不到头结点的下个节点,那么便无法把其他节点都置为空,也就无法清空链表了。

 最后的最后来个区别 

老铁们给小弟点个赞怎么样?我觉得非常可以!

猜你喜欢

转载自blog.csdn.net/Biteht/article/details/121583883