Java链表数据结构

        链表数据结构和数组的横向不同,他是向下延申的,因为他是递归函数的应用。通常在类中定义一个内部类,把内部类当作属性,外部类中存放根节点,运行的时候需要先判断根节点的状态,然后再看是否需要调用根节点下一个节点也就是too.nxet其中too表示当前对象。this.nxet就是当前对象的下一级。


public class DiGui{
	public static void main(String []args) {
		Nodn k = new Nodn();
		k.add(1);
		k.add(3);
		k.add(4);//添加数据
		
		k.del(3);//删除数据
		
		
		
		k.upN(4, 5);//替换数据
		
		System.out.println(k.find(4));//查找数据
		
		k.ins(1, 9);//插入数据
		
		k.print1();//打印数据
	}
}

class Nodn{
	private int cin=0;
	private Nodn1 too;
	
	//添加节点
	public void add(int a) {
		if(too==null) {//优先判断跟节点
			too = new Nodn1(a);
		}else {
			too.addNodn1(a);
		}
	}
	
	//输出节点
	public void print1() {
		if(too!=null) {
			System.out.println(too.a);
			too.printNodn1();
		}
	}
	
	//删除节点
	public void del(int a) {
		if(too==null)return;
		if(too.getA()==a) {
			too = too.nxte;
		}else {
			too.delNodn1(a);
		}
	}
	
	//查找节点
	public boolean find(int a) {
		if(too==null) return false;
			
		
		if(too.getA()==a) {
			return true;
			
		}else {
			return too.findNodn1(a);
		}
			
	}
	
	//修改节点
	public boolean upN(int oldA,int newA) {
		if(too==null) return false;
		if(too.getA()==oldA) {
			too.setA(newA);
			return true;
		}else {
			return too.upNodn1(oldA, newA);
		}
	}
	
	//往前插入节点
	public void ins(int index,int a) {
		if(index<0)return;
		cin=0;
		if(index == cin) {
			Nodn1 k = new Nodn1(a);
			k.nxte=too;
			too=k;
		}else {
			too.insert(index, a);
		}
	}
	
	private class Nodn1{
		private int a;
		private Nodn1 nxte;//把自己当作自己的属性
		
		public Nodn1(int a) {
			this.a=a;
		}
		
		public void setA(int a) {
			this.a=a;
		}
		
		public int getA() {
			return a;
		}
		
		//添加节点
		public void addNodn1(int a) {
			if(this.nxte==null) {
				this.nxte=new Nodn1(a);
			}else {
				this.nxte.addNodn1(a);
			}
			
		}
		
		//删除节点
		public void delNodn1(int a) {
			if(this.nxte!=null) {
				if(this.nxte.a==a) {
					this.nxte = this.nxte.nxte;//this表示too。too.nxte的下一个nxte把当前的nxte覆盖掉(替换位置)
				}else {
					this.nxte.delNodn1(a);
				}
			}
			
		}
		
		//输出所有节点
		public void printNodn1() {
			if(this.nxte!=null) {
				System.out.println(this.nxte.a);
				this.nxte.printNodn1();
			}
		}
		
		//查找节点
		public boolean findNodn1(int a) {
			if(this.nxte!=null) {
				if(this.nxte.a==a) {
					return true;
				}else {
					this.nxte.findNodn1(a);
				}
			}
			return false;
		}
		
		//修改节点
		public boolean upNodn1(int oldA,int newA) {
			if(this.nxte!=null) {
				if(this.nxte.getA()==oldA) {
					this.nxte.setA(newA);
					return true;
				}else {
					return this.nxte.upNodn1(oldA, newA);
				}
			}
			return false;
		}
		
		//往后插入节点
		public void insert(int index,int a) {
			cin++;
			if(index==cin) {
				Nodn1 k = new Nodn1(a);
				k.nxte=this.nxte;
				this.nxte=k;
			}else {
				this.nxte.insert(index, a);
			}
		}
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值