首先我们知道链表在逻辑上是有前后关系的,在物理结构上不保证有前后关系,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。
在实际中,链表的结构非常多样,要学习链表就要知道链表常用的变量的含义,在链表中会使用head代表链表的第一个节点,通过第一个节点就可以找到完整的链表的所有节点,所以,链表的第一个节点往往代表整个链表,空链表就是一个节点都没有的链表,也就没有第一个节点,head=null表示第一个节点不存在,也就是整个链表为空链表。
关于链表的基本操作一般有以下几种:
链表的头插:
1.如果要插入的数据没有节点,先给它装入一个节点
Node node=new Node();
node.value=0;
2.让原来的第一个节点成为新节点的下一个节点
node.next=head;
3.更新最新的第一个节点为新节点
head=node;
链表的尾插:
链表的尾插和头插不同,需要分情况讨论,看链表是空链表还是非空链表,对于空链表来说,尾插就和头插的处理方法一样,对于非空链表来说,分为以下具体步骤来实现:
1.如果没有在节点中,装到节点里,让新的节点的next=null; Node node=new Node(val); 构造方法中已经让.next=null了。
2.找到倒数第一个节点(找到.next=null的节点)
Node last=head;
while(last.next!=null)
{
last=last.next;
}
last就是最后一个节点。
3.让原来的倒数第一个节点的下一个节点为新节点
last.next=node;
链表的头删:
链表的头删比较简单,就是将head往后移一个就可以实现了,head=head.next;
l链表的尾删:
链表的尾删也要分情况讨论,分为1)只有一个节点,2)有两个及两个以上节点,具体实现的代码如下所示:
private Node popBack(Node head)
{if(head==null)
{
System.out.println("空链表无法删除");
return ;
}
if(head.next==null)
{
return null;
}
else
{
Node lastSecond=head;
while(lastSecond.next.next!=null)
{
lastSecond=lastSecond.next;
}
lastSecond.next=null;
return head;
}
}