您的位置:首页 > 编程语言 > Java开发

使用JAVA代码来模拟线性链表的相关操作(增加,删除,插入及查找等)

2011-08-24 18:44 801 查看
package test.linetable;

public class SingleLinkTableDemo {

private SingleNode firstNode;

private SingleNode lastNode;

private int size;

/**

* 获取第n个节点

* @param index

* @return

* @throws Exception

*/

public SingleNode getNode(int index) throws Exception{

if(index >= size) throw new Exception(" out of range!");

SingleNode node = null;

SingleNode tmpNode = firstNode;

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

if(i == index) {

node = tmpNode;

break;

}

tmpNode = tmpNode.getNext();

}

return node;

}

/**

* 增加新节点

* @param newValue

*/

public void addNode(String newValue){

SingleNode newNode = new SingleNode(newValue);

if(firstNode == null) {

firstNode = newNode;

lastNode = newNode;

}else{

//设置当前最后一个节点的下一个节点为新增节点

lastNode.setNext(newNode);

//将最后一个节点指针指向新增节点

lastNode = newNode;

}

size++;

}

/**

* 在当前节点后插入一个新节点

* @param currNode

* @param newNode

*/

public void insertNode(SingleNode currNode,SingleNode newNode){

newNode.setNext(currNode.getNext());

currNode.setNext(newNode);

size++;

}

/**

* 删除第n个节点,所谓线性表的链式存储删除插入的时间复杂度为O(1),

* 是要先知道当前节点的情况,如果不知道,还是要进行遍历线性表的,因此实际应用中,时间复杂度还是O(n),所以性能一定不如线性表的顺序存储!

* @param i

* @throws Exception

*/

public void deleteNode(int currIndex) throws Exception{

if(currIndex < 0 || currIndex > (size - 1) ) throw new Exception("out of range!");

int j = currIndex - 1 < 0 ? 0: currIndex - 1;

SingleNode tmpNode = firstNode;

if(currIndex == 0) {

firstNode = firstNode.getNext();

}else{

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

if(i == j) {

SingleNode nextNode = tmpNode.getNext().getNext();

tmpNode.setNext(nextNode);

if(currIndex == (size -1)) lastNode = tmpNode;

break;

}

tmpNode = tmpNode.getNext();

}

}

if(size > 0) size--;

}

public SingleNode getFirstNode() {

return firstNode;

}

public SingleNode getLastNode() {

return lastNode;

}

public int getSize(){

return size;

}

public static void main(String[] args){

SingleLinkTableDemo sd = new SingleLinkTableDemo();

sd.addNode("0");

sd.addNode("1");

sd.addNode("2");

sd.addNode("3");

sd.addNode("4");

sd.printList(sd);

System.out.println("-----------------------------------");

try {

SingleNode indexNode = sd.getNode(2);

SingleNode newNode = new SingleNode("900");

sd.insertNode(indexNode, newNode);

sd.printList(sd);

System.out.println("-----------------------------------");

sd.deleteNode(sd.getSize() -1);

System.out.println("first Node = " + sd.getFirstNode().getValue());

sd.printList(sd);

System.out.println("last Node = " + sd.getLastNode().getValue());

} catch (Exception e) {

e.printStackTrace();

}

System.exit(0);

}

/**

* 遍历当前线性表

* @param sd

*/

public void printList(SingleLinkTableDemo sd){

for(int i = 0;i < sd.getSize();i++){

SingleNode tmpNode;

try {

tmpNode = sd.getNode(i);

System.out.println("node" + i + " =" + tmpNode.getValue());

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

class SingleNode {

public String value;

public SingleNode next;

public SingleNode(String value){

this.value = value;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

public SingleNode getNext() {

return next;

}

public void setNext(SingleNode next) {

this.next = next;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐