大家好,我是小小怪,这篇文章是我第一次发的作品,希望大家能喜欢.
链表的实现:
一些基本功能 : 添加 , 删除 , 判空 , 查找 , 遍历.
package arithmetic.linked;
public class linked {
public static void main(String[] args) {
Node n = new Node();
n.add("a");
n.add("b");
n.add("c");
n.add("d");
n.replace(3,"f");
n.replace("a","h");
Object []obj = n.toarry(n);
for (Object o : obj){
System.out.print(o+" ");
}
}
}
//节点类
class Node<T>{
private Node root;//根节点
private int count = 0;//链表长度
private String data;//一个节点中的数据
private Node next;//指向下一个节点
//无参构造
public Node() {
}
//有参构造
public Node(String data) {
this.data = data;
}
//data的set注入
public void setData(String data){
this.data = data;
}
//添加节点
public void add(String data){
this.root=this;
if (root.next==null){//当前节点的下一个节点为空,则创建一个新节点,把数据填入
root.next= new Node(data);
}else {//当前节点的下一个节点不为空,则迭代寻找,直到最后一个节点,它的下一个节点一定为空,在它的后面添加新节点
Node noder = root.next;
while (noder.next!=null){
noder = noder.next;
}
noder.next = new Node(data);
}
count++;
}
//根据索引删除节点
public void remove(int index){
if (index==0) root=null;
int sum = 1;
Node noder = root;
while (sum!=index){
sum++;
noder = noder.next;
}
if (noder.next.next==null) noder.next=null;
else noder.next=noder.next.next;
count--;
}
//根据值删除节点
public void remove(String data){
Node noder = root;
while (!(noder.next.data.equals(data))){
if (noder.next==null) return;
noder = noder.next;
}
if (noder.next.next==null) noder.next=null;
else noder.next=noder.next.next;
count--;
}
//链表长度
public int size(){
return count+1;
}
//判断是否为空
public boolean isEmpty(){
if (count==0) return true;
return false;
}
//根据索引查找数据
public String get(int index){
if (index>count)return "没有这个数据";
int sum = 0;
Node noder = root;
while (sum!=index){
if (noder.next==null) return null;
noder = noder.next;
sum++;
}
return noder.data;
}
//是否包含某个值
public boolean contains(String data){
if (count==0) return false;
Node noder = root;
while (!(noder.next.data.equals(data))){
if (noder.next==null) return false;
noder = noder.next;
}
return true;
}
//根据索引替换新数据
public void replace(int index , String newdata){
if (index>count) System.out.println("你的索引有问题,数值比链表还大");
int sum = 0;
Node noder = root;
while (sum!=index){
noder = noder.next;
sum++;
}
noder.setData(newdata);
}
//将老数据替换成新数据
public void replace(String olddata , String newdata){
Node noder = root;
while (!(noder.next.data.equals(olddata))){
if (noder.next==null) System.out.println("该链表中没有这个数据,请再次检查你输入的参数");
noder = noder.next;
}
noder.next.setData(newdata);
}
//打印此链表
public Object[] toarry(Node n){
Object []obj = new Object[count];
if (count==0) return null;
for (int i = 1 ; i < count+1 ; i++){
obj[i-1] = n.get(i);
}
return obj;
}
}
不足之处,各位多多指正.
也希望我的作品,各位能有所收获.