单向链表仿LinkedList

public class ChainTable {

 

private Node firstNode;//第一个节点

 

private Node lastNode;//最后一个节点

 

private int size;//链表中含有的元素个数

 

public int size(){//返回链表中含有的元素个数

return size;

}

 

//添加一个节点

public void add(Object obj){

 

if(size == 0){//当添加的节点为第一个节点的时候

 

Node node = new Node();

node.setObj(obj);

 

lastNode = node;

 

firstNode = node;

 

firstNode.setNextNode(lastNode);

lastNode.setNextNode(null);

size++;

 

}else{

 

Node node = new Node();

node.setObj(obj);

lastNode.setNextNode(node);

lastNode = node;

size++;

 

}

 

}

 

//添加一个链表

public void add(ChainTable table) throws Exception{

 

if(table != null){

for(int i=0;i<table.size();i++){

this.add(table.get(i));

}

}

 

}

 

//获取所在索引的节点中的值

public Object get(int index) throws Exception{

 

return getNode(index).getObj();

}

 

//获得对应索引的节点

private Node getNode(int index) throws Exception{

 

//让node 指向第一个节点

           Node node = firstNode;

 

           //保证index在正常区间内

if(index < 0 || index >= size){

throw new Exception();

}else{

for(int i=0;i<index;i++){

node = node.getNextNode();

}

}

 

return node;

 

}

 

//删除所在索引的值

public void remove(int index) throws Exception {

 

if(index < 0 | index >=size){

throw new Exception();

}

 

if(index == 0){

firstNode = firstNode.getNextNode();

}else if (index == (size -1)){

Node upNode = getNode(size -2);

 

lastNode = upNode;

 

}else{

Node upNode = getNode(index - 1);

 

Node node = upNode.getNextNode();

 

Node nextNode = node.getNextNode();

 

upNode.setNextNode(nextNode);

node = null;

}

 

size--;

 

}

 

//判断是否包含某个元素

public boolean contain(Object obj) throws Exception{

 

return indexOf(obj) >= 0;

}

 

//返回obj的索引  若没有此元素 则返回-1

public int indexOf(Object obj) throws Exception{

 

int index = -1;

 

if(obj == null){

for(int i=0;i<size - 1;i++){

if(get(i) == null){

index = i;

break;

}

}

}else{

for(int i=0;i<size -1;i++){

if(get(i).equals(obj)){

index = i;

break;

}

}

}

 

return index;

}

 

 

//内部类Node

public class Node{

private Object obj;//数据域

 

private Node nextNode;//指针域  指向下一个节点

 

public Node(){//构造方法

 

}

 

public Node(Object obj,Node nextNode){//构造方法

this.obj = obj;

this.nextNode = nextNode;

}

 

public Object getObj() {//获取数据

return obj;

}

 

public void setObj(Object obj) {//设置数据

this.obj = obj;

}

 

public Node getNextNode() {//获得下一个节点

return nextNode;

}

 

public void setNextNode(Node nextNode) {//设置下一个节点

this.nextNode = nextNode;

}

 

}

 

 

 

}

 

posted @ 2016-09-26 15:34  sujianbo  阅读(222)  评论(0编辑  收藏  举报