Java实现的链表,提供增,删,改,查方法。

来源:互联网 发布:量子统计 淘宝 编辑:程序博客网 时间:2024/06/05 08:30

首先创建一个结点类,不用说看代码:

public class Node {
private Node previous;
private Object object;
private Node next;
public Node(){

}
public Node(Node previous, Object object, Node next) {
super();
this.previous = previous;
this.object = object;
this.next = next;
}
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}

之后创建链表

增加结点的方法:

public void add(Object obj){
if(null==first){
Node n=new Node();
n.setPrevious(null);
n.setObject(obj);
n.setNext(null);

first=n;
last=n;
}else {
Node node=new Node();
node.setPrevious(last);
node.setObject(obj);
node.setNext(null);


last.setNext(node);
last=node;
}
size++;
}

封装结点查找:

public Node node(int index) {
Node temp =null;
if(first!=null){
temp=first;
for(int i=0;i<index;i++){
temp=temp.getNext();
}
}
return temp; 
}

删除结点:

public void remove(int index) {
Node temp=node(index);

if(temp!=null){
Node up=temp.getPrevious();
Node down=temp.getNext();
up.setNext(down);
down.setPrevious(up);
}
size--;
}

查询结点:

//判断是否越界

private void rangeChect(int index) {
if(index<0||index>=size){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public Object get(int index) {
//越界处理
rangeChect(index);
Node temp=node(index);
if (temp!=null) {
return temp.getObject();
}

return null;

}

插入结点:

public void add(int index,Object obj) {
Node temp=node(index);
Node newNode=new Node();
newNode.setObject(obj);

if(temp!=null){
Node up=temp.getPrevious();
up.setNext(newNode);
newNode.setPrevious(up);
newNode.setNext(temp);
temp.setPrevious(newNode);

size++;
}

}

最后附上它的全部代码:

package cn.xzn.collection;


public class Node {
private Node previous;
private Object object;
private Node next;
public Node(){

}
public Node(Node previous, Object object, Node next) {
super();
this.previous = previous;
this.object = object;
this.next = next;
}
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}


package cn.xzn.collection;




public class setLinklist { 
private Node first;
private Node last;

private int size;

public void add(Object obj){
if(null==first){
Node n=new Node();
n.setPrevious(null);
n.setObject(obj);
n.setNext(null);

first=n;
last=n;
}else {
Node node=new Node();
node.setPrevious(last);
node.setObject(obj);
node.setNext(null);


last.setNext(node);
last=node;
}
size++;
}
public int size(){
return size;
}
// 检查是否越界
private void rangeChect(int index) {
if(index<0||index>=size){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public Object get(int index) {
//越界处理
rangeChect(index);
Node temp=node(index);
if (temp!=null) {
return temp.getObject();
}

return null;

}
public Node node(int index) {
Node temp =null;
if(first!=null){
temp=first;
for(int i=0;i<index;i++){
temp=temp.getNext();
}
}
return temp; 
}

public void remove(int index) {
Node temp=node(index);

if(temp!=null){
Node up=temp.getPrevious();
Node down=temp.getNext();
up.setNext(down);
down.setPrevious(up);
}
size--;
}
public void add(int index,Object obj) {
Node temp=node(index);
Node newNode=new Node();
newNode.setObject(obj);

if(temp!=null){
Node up=temp.getPrevious();
up.setNext(newNode);
newNode.setPrevious(up);
newNode.setNext(temp);
temp.setPrevious(newNode);

size++;
}

}

public static void main(String[] args){
setLinklist linklist =new setLinklist();
linklist.add("aaa");
linklist.add("bbb");
linklist.add("ccc");
//linklist.remove(1);
linklist.add(1,"BBBBB");
System.out.println(linklist.get(1));

}

}