链表-java数据结构

Posted 旧时星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表-java数据结构相关的知识,希望对你有一定的参考价值。

链表(增,删,改,查)-java数据结构

####增:

单向链表且不考虑排序

创建的单向链表设有一个头节点,添加数据只需将class的next指向新增的对象。

暂时没有考虑到排序,难点在添加时需要遍历找到链表最末尾再添加即可。

链表里的单元是HeroNode对象,此处先创建一个HeroNode类

class HeroNode{
	public int no;
	public String name;
	public String nickName;//绰号
	public HeroNode next;
	
	public HeroNode(int no,String name,String nickName) {//构造器
		this.no=no;
		this.name=name;
		this.nickName=nickName;
	}

	@Override
	public String toString() {
		return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName + "]";
	}
	
}

创建一个单链表类内部已创建一个HeroNode的头节点

class SingleLinkedList{
	//初始化一个头节点用来创建定义整个单链表
	private HeroNode head=new HeroNode(0,"","");
}

在SingleLinkedList内再考虑添加和遍历输出

public void addData(HeroNode h) {
		HeroNode a=head;
		//添加数据是通过找到列表最后的一个数据才可以添加
		//这里与下面的打印列表不同,打印列表要打印辅助变量指向的
		//当前对象的信息,所以循环判断的条件不同,同样赋予
		//辅助变量也不同,在添加时寻找列表最后通过判断该值的next是否为空
		//而打印时则要判断该值是否为空
		while(true) {
			if(a.next==null) {
				break;
			}
			a=a.next;
		}
		a.next=h;
	}
	public void list() {
		if(head.next==null) {
			System.out.println("链表为空");
			return;
		}
		HeroNode a=head.next;
		while(true) {
			if(a==null) {
				break;
			}
			System.out.println(a);
			a=a.next;//输出当前Hero对象信息后将a指向后一个
            //接着判断该对象是否为空即是否有数据可以输出
		}
	}

有序单向链表

关键是找到插入的节点,然后改变节点next的指向即可

一方面先将插入节点设为要插入的前一个节点,在判断好插入节点后

先将前一个节点的next指向加入的节点,再使得加入的节点指向原来的下一个节点。

public void add(HeroNode h) {
		HeroNode n=head;
		boolean a=false;//是否可加入的标志
		while(true) {
			if(n.next==null) {//循环到队列最后则直接退出
				break;
			}
			if(h.no==n.no) {//循环时找到相同的编号说明已加入
				a=true;      //改变标志表明不可加入
				break;
			}
			if(n.next.no > h.no) {
				break;
			}
			n=n.next;   //循环节点向后移动
		}
		if(a) {
			System.out.println("该英雄人物"+n.name+"已加入");
		}else {
			h.next=n.next;
			n.next=h;
		}
		
	}

修改:

通过创建一个change函数完成修改,一般根据其number(不可变量),遍历找到该节点,然后修改内容即可。

在测试或主函数中只需创建一个新的节点修改部分内容,再调用change函数即可。

public void change(HeroNode h) {
		HeroNode n=head;
		boolean a=false;
		while(true) {
			if(n.next==null) {
				break;
			}
			if(n.no==h.no) {
				a=true;
				break;
			}
			n=n.next;
		}
		if(a) {
			n.name=h.name;
			n.nickName=h.nickName;
		}else {
			System.out.println("该英雄未加入");
		}
	}

删除:

操作类似于修改,只是找到删除节点的前一个节点,将该节点的next指向删除节点的下一个节点。

public void del(int no) {
		HeroNode n=head;
		boolean a=false;
		while(true) {
			if(n.next==null) {
				break;
			}
			if(n.next.no==no) {
				a=true;
				break;
			}
			n=n.next;
		}
		if(a) {
			n.next=n.next.next;
		}else {
			System.out.println("该英雄未加入");
		}
	}

以上是关于链表-java数据结构的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 ---[链表 ] [使用链表实现栈 以及 队列 (Java代码实现)]

数据结构单向链表及其Java代码实现

java数据结构:单链表常见操作代码实现

Java数据结构—环形链表

Java数据结构线性表之链表

Java数据结构线性表之链表