博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单向链表仿LinkedList
阅读量:5161 次
发布时间:2019-06-13

本文共 2258 字,大约阅读时间需要 7 分钟。

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;

}

 

}

 

 

 

}

 

转载于:https://www.cnblogs.com/jianbo-su/p/5909392.html

你可能感兴趣的文章
curl常用操作
查看>>
什么情况下,英文单词中的k发音变g,t发音变d,p发音变b
查看>>
Android 图片旋转(使用Matrix.setRotate方法)
查看>>
CAP理论
查看>>
Linux----内核学习过程
查看>>
SSL 1761——城市问题[最短路]
查看>>
[树上差分][子树求和][树形dp] Jzoj P5911 Travel
查看>>
浏览器中使用 ES6 import
查看>>
Xcode 清理存储空间
查看>>
poj2947(高斯消元解同模方程组)
查看>>
Node-Webkit打包
查看>>
Kotlin——初级篇(八):关于字符串(String)常用操作汇总
查看>>
迷失在小镇上的日记(5)
查看>>
Java Annotation 注解
查看>>
《跟我学IDEA》一、下载安装idea,设置背景字体编码,配置JDK
查看>>
子类中调用父类方法
查看>>
基本数据类型
查看>>
C#操作串口总结
查看>>
【leetcode刷题笔记】Divide Two Integers
查看>>
【leetcode刷题笔记】Letter Combinations of a Phone Number
查看>>