写给刚刚入门计算机且正在学习链表的孩子,希望对他能有所帮助,也希望能对链表感兴趣的同学有所帮助。
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;
}
}