链表是由一组任意的存储单元存储线性表的数据单元,链表由两部分组成:结点(数据域)、指针域。整个链表的存取必须从头指针开始,头指针指向第一个结点,最后一个结点指向为空。java中没有指针概念,但是java中有引用,可以用引用代替指针。
下面是我写的一个例子:
package com.test.linked;
public class newlinkList {
public class Node{
private Object data;
private int index;
private Node next;
public Node(int index,Object data){
this.index=index;
this.data=data;
}
public String toString(){
return index+"...."+data.toString();
}
}
private Node header;
private int size=0;
/**
* 在头插入
* @param index
* @param o
*/
public void insertFirst(int index,Object o){
if(header==null){
header=new Node(0,0);
}
Node node=new Node(index,o);
node.next=header.next;
header.next=node;
size++;
}
/**
* 在特定位置插入(在该位置后面插入)
* @param key
* @param index
* @param o
*/
public void insertByKey(int key,int index,Object o){
Node p=findList(key);
Node node=new Node(index,o);
node.next=p.next;
p.next=node;
size++;
System.out.println("insertByKey finished");
}
/**
* 在头删除
*/
public void deleteFirst(){
if(size>0){
header.next=header.next.next;
size--;
}else{
System.out.println("链表已为空!");
}
}
public int size(){
return size;
}
/**
* 删除特定位置元素
* @param key
*/
public void deleteByKey(int key){
Node previous=header;
Node p=header;
while(p.index!=key){
if(p.next==null){
System.out.println(" can't find!");
}else{
previous=p;
p=p.next;
}
}
previous.next=previous.next.next;
System.out.println(previous);
}
/**
* 链表展示
*/
public void displayList(){
Node p=header;
System.out.println("List (header..last) ");
while(p.next!=null){
p=p.next;
System.out.println(p.toString());
}
}
/**
* 通过key查找,可扩展,如果key相同多个node通过equals方法找到对象
* @param key
* @return
*/
public Node findList(int key){
Node p=header;
while(p.index!=key){
if(p.next==null){
System.out.println(" can't find!");
return null;
}else{
p=p.next;
}
}
System.out.println("find this Node");
return p;
}
public static void main(String[] args){
newlinkList list=new newlinkList();
list.insertFirst(1,"NO.1");
list.insertFirst(2,"NO.2");
list.insertFirst(3,"NO.3");
list.displayList();
//list.deleteFirst();
//System.out.println(list.findList(2).toString());
//list.displayList();
list.insertByKey(2, 6, "I'm be inserted");
//list.displayList();
list.deleteByKey(6);
list.displayList();
}
}
输出结果:
List (header..last)
3....NO.3
2....NO.2
1....NO.1
find this Node
insertByKey finished
2....NO.2
List (header..last)
3....NO.3
2....NO.2
1....NO.1