先来看一下链表的组成
链表是由数据域与指针域组成,上一个结点的指针域指向下一个结点的数据域。
先来定义一个单链表
public class SingleList{
private Node head;//定义头结点
private int size; //链表长度
public class Node{
Object data;//数据域
Node next;//指针域
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
}
}
public void insert(int i, Object x) {
if(i<0||i>size){// 有索引值的方法需要判断下标是否越界
throw new IndexOutOfBoundsException(i+"越界");//越界则抛出异常
}
Node newNode=new Node(x,null);//定义一个要插入的结点
if (head==null){//判断如果头结点为空,则要插入的结点就是头结点
head=newNode;
}else {
if(i==0){//当结点插入到头部的情况
newNode.next=head;//图解如下
head=newNode;
}
else{
Node pnode=head;
for(int j=1;j<i;j++){
pnode=pnode.next;
}//找到i-1位置的结点
newNode.next=pnode.next;
pnode.next=newNode;//图解如下
}
}
size++;//插入成功 链表长度加一
}
单链表其他操作也大同小异,主要要注意使用for循环找到需要找到的结点和注意判断索引越界问题