链表概述
我们在学习之前首先要知道链表是一个什么东西,那它是个啥呢,直接上图简单明了,看图来介绍。
我们可以清楚的看到这个链有头有尾,最后面是NULL,最前面是头指针,学过C语言指针的同学可以看出java数据结构学习的链表与C语言中的极其相似。其实他们的道理也差不多。怎么构建链表呢,首先链表的主要元素有head头,data数据,next与下一个节点的链接部分。根据这些条件就可以轻松的构建出链表了。
链表由多个节点组成,每个节点由上图可知包含value和指向下一个节点的指针next,我们可以将一个节点看成一个节点类,value和next分别为类中定义的元素,链表就由许多个节点类组成
代码如下:
public class SingLinkList {//代表链表整体
private Node head = null;//头指针
//节点类
private static class Node {
int value;//值00
Node next;
//下一个节点指针,因为下一个元素还是Node所以为Node类型
//有参构造,方便赋值
public Node(int value, Node next) {
this.value = value;
this.next = next;
}
}
}
给链表插入元素
头插法
头插法顾名思义就是从链表的头部开始插入元素,首先肯定要创建一个节点对象,因为链表就是由一个个节点对象组成,怎么连接起来呢,因为现在链表没有值,我们定义了一个头指针,可以让头指针指向这个节点对象,然后如果继续添加的话链表就不为空了,因为从头插入,所以新节点的next指向刚才插入元素的value,新插入的节点就变为1,原来一的就变成了2。代码如下:
public void addFirst(int value) {
/*
首先new 节点对象,值为传入的value,next指向的就是head
因为链表为空的时候head=null,新插入元素的下一个元素为null
链表不为空head对应值为第一个元素的值,但是原来的一变成二
新插入的变为一刚好next为head.
*/
head = new Node(value, head);
}
尾插法
尾部插入其实要比头插复杂,尾部插入我们肯定要找到最后面的节点,然后让最后面节点的next指向新插入节点的value,新插入节点的next就变为了null,因为尾部插入。下面为完整代码演示
查找尾部节点代码
尾部节点特点:next—>null
private Node findLast() {
//首先判断链表是否为空
if (head == null) {
return null;
}
Node p;
//循环遍历链表,遍历完成返回节点
for (p = head; p.next != null; p = p.next) {
}
return p;
}
尾插法代码演示
public void addLast(int value) {
//调用findLast方法获取要插入链表的最后一个节点
Node last = findLast();
if (last == null) {
//链表为空,尾插就相当于头插
addFirst(value);
}
last.next = new Node(value, null);
}
向索引位置插入
向索引位置插入我们首先肯定得获取到索引位置的节点,我们可以通过遍历链表来获得我们需要插入位置的节点,获取节点后,接下来就要插入了。
分为两种情况:
1.如果索引位置是0的话,我们相当于头插法,直接调用addFirst方法。
2.索引不为0,我们要在链表中新插入一个节点,我们索引位置就要变成我们插入的节点,原来索引位置上的节点的next节点就是我们新插入节点,我们新插入的节点的next就相当于原来节点的next。看图理解。
代码演示部分:
//遍历链表查找节点
private Node findNode(int index){
int i=-1;
for(Node p=head;p !=null;p=p.next,i++){
if(i==index){
return p;
}
}
return null;
}
public void insertNode(int index, Integer value){
if(index==0){
addFirst(value);
return;
}
Node prev=findNode(index-1);
if(prev==null){
System.out.println("你插入的位置有误!!");
}
prev.next=new Node(value,prev.next);
}
综上所述,就是对链表节点插入的几种方法了,如果有错误,请各位在评论区指出 感谢各位的浏览,接下来的博客会持续更新java数据结构这里的东西,再次感谢各位的浏览。