链表是一种存储结构,由一系列的结点组成。链表包括单向链表,循环链表,双向链表等,在这里,我们只讲单向链表,单向链表的每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。所以创建链表时,可以先写一个结点类:
public class Node {
public Node node;
public Node next;
public int a;
public Node(int a){
this.a=a;
}
}
创建一个链表时,可以先创建一个空链表,然后不断往空链表中插入元素:
public class LinkList {
Node head=null;
Node last=head;
/**
* 链表的插入方法
* @param a
*/
public void insert(int a){
Node node=new Node(a);
if(head==null){
head=node;
}else{
last.next=node;
}
last=node;
}
/**
* 链表的创建
*/
public void createLink(){
insert(2);
insert(4);
insert(1);
insert(9);
insert(6);
}
}
一个链表创建好以后,我们就可以对链表进行操作了,链表的最基本操作是增删改查,增即往链表中插入元素,以后代码已经显示了,接下来我们进行删改查链表和得到链表的长度:
/**
* 链表元素的删除
* @param index
*/
public void delete(Object obj){
if(head !=null){
Node node=head;
Node node1=node.next;
while(node1!=null){
if(node1.obj.equals(obj)){
node.next=node1.next;
node1=node1.next;
}else{
node=node.next;
node1=node1.next;
}
}
}
}
/**
* 根据指定位置查找元素
* @param index 位置
*/
public void find (int index){
Node node=head;
for(int i=0;i<index-1;i++){
node=node.next;
}
System.out.println("链表中第"+index+"个元素的值为"+node.obj);
}
/**
* 修改第index的值为obj
* @param index
* @param obj
*/
public void modify(int index,Object obj1){
Node node=head;
for(int i=0;i<index-1;i++){
node=node.next;
}
node.obj=obj1;
}
/**
* 得到链表的长度
* @return
*/
public int length(){
int length=0;
Node node=head;
while(node!=null){
length++;
node=node.next;
}
return length;
}
接下来是进行链表的打印操作,在这里用到了递归:
/**
* 打印链表函数
*/
public void printList(Node head){
Node node=head;
while(node!=null){
System.out.println(node.obj);
node=node.next;
}
}
好了,链表的基本操作已经完成了。