闲聊数据结构之链表

写给刚刚入门计算机且正在学习链表的孩子,希望对他能有所帮助,也希望能对链表感兴趣的同学有所帮助。

01 什么是链表


链表是一种重要的数据结构,是一种数据的存储方式。如下图所示:

链表

02 链表组成


链表由多个链表元素组成,每个元素称为节点。每个单链表元素包括两个部分,第一部分是存储的数据,如下图的1;第二部分存储的是下一个节点,如下图的n2。

链表元素

链表存储的物理结构可能是连续的,但也可能是无序的。但是链表之间的元素(节点)是有序的逻辑相连。

03 链表的操作


增加节点。从当前节点开始,循环向后找,如果下一个节点为空,则此时的当前节点已经是最后一个节点,在此节点后追加新节点即可。下图为增加新节点n2。

增加

插入节点。插入一个新节点,作为当前节点的下一个节点,下图是插入新节点n3。

插入

删除节点。把当前节点n1的下一个节点指向n3,就完成了对n2的删除。

删除

04 链表的程序实现


利用java创建Node.java类,实现单链表,代码如下:

//一个节点类

public class Node {

    //每个节点都包含两项,一是节点内容data,二是下一个节点next

     //节点内容

     int data;

     //下一个节点

     Node next;

     //在Node构造函数中,对当前节点赋数据data的值

     public Node(int data)

     {

          this.data=data;

     }

     //为节点追加节点,支持在第一个节点后连续追加节点

     public Node append(Node node)

     {

          //将当前节点存到节点变量currentNode中

          Node currentNode = this;

          //从当前节点开始,循环向后找

          while(true)

          {

               //取出当前节点的下一个节点,赋值到节点变量nextNode中

               Node nextNode = currentNode.next;

               //如果下一个节点为null,则当前节点已经是最后一个节点,追加新节点,然后跳出循环

               if (nextNode== null)

               {

                    //把需要追加的节点追加为找到的当前节点的下一个节点

                    currentNode.next=node;

                    break;

                }

               //如果下一个节点不为null,则将下一个节点赋给当前节点,继续循环,直到最后一个节点,即下一个节点为null

                currentNode = nextNode;

          }

          //返回当前节点,也可以没有返回值,有返回值主要是实现连续追加节点功能

          return this;

     }

     //插入一个节点,作为当前节点的下一个节点

     public void after(Node node)

     {

          //取出下一个节点,作为下下一个节点

          Node nextNext=next;

          //把新节点作为当前节点的下一个节点

          this.next=node;

          //把下下一个节点设置为新节点的下一个节点

          node.next=nextNext;

     }

     //显示所有节点的数据信息

     public void show()

     {

          Node currentNode=this;

          while(true)

          {

               System.out.print(currentNode.data+" ");

               //取出下一个节点

               currentNode=currentNode.next;

               //如果是最后一个节点

               if (currentNode==null)

               {

                    break;

               }

          }

          System.out.println();

     }

     //删除下一个节点

     public void removeNext()

     {

          //取出下一个节点的下一个节点

          Node newNext=next.next ;

          //把下下个节点设置为当前节点的下一个节点

          this.next=newNext;

     }

     //获取下一个节点

     public Node next()

     {

          return this.next;

     }

     //获取节点中的数据

     public int getData()

     {

          return this.data;

     }

     //当前节点是否是最后一个节点,当下一个节点为null时为最后一个节点,则返回true

     public boolean isLast()

     {

          return next==null;

     }

}

你可能感兴趣的:(闲聊数据结构之链表)