大佬教程收集整理的这篇文章主要介绍了链表(Java实现),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
单链表
单向循环链表
双向循环链表
class heronode {
public int no;
public @R_772_10495@ng name;
public @R_772_10495@ng nickname;//以上三项就是data域
public heronode next;//next域
public heronode(int no,@R_772_10495@ng name,@R_772_10495@ng nickName) {//为什么只有数据域?
this.no = no;
this.name = name;
this.nickname = nickname;
}
@OverrIDe
public @R_772_10495@ng to@R_772_10495@ng() {//这里不能加入next,如果加入,会是什么情况?===>>>打印所有以后的结点
return "heronode{" +
"no=" + no +
",name='" + name + '\'' +
",nickname='" + nickname + '\'' +
'}';
}
}
首先要考虑链表包含哪些信息
图示
//2-1 创建单链表ADT:SinglelinkedList类,来管理这些节点
class SinglelinkedList{
//带头节点的单链表
private heronode head = new heronode(0,"","");
/*
add方法
1.因为是添加,所以要给我要添加的东西--->在形参提供节点
2.因为是添加到结尾,所以要先找到结尾--->辅助变量temp,从head开始后移
@param heronode
*/
public voID add(heronode heronodE){
//辅助变量
heronode temp = head;
//这是一种套路,先看是否到了结尾,再后移,形成一种循环
while(true){
if(temp.next == null){
break;
}
temp = temp.next;
}
temp.next = heronode;
}
/*
List方法
遍历思想:完整思想--->从最小不间断的考虑到最大--->链表为0,1,2,3...n个节点分别要做什么
*/
public voID List(){
//0个节点的情况
if(head.next == null){
System.out.println("链表为空");
return;
}
//不为零的情况:这类情况可以统一考虑
heronode temp = head.next;
while(true){
if (temp == null){
break;
}
System.out.println(temp);
temp = temp.next;
}
}
/*
delete方法
1.删除要知道删除谁--->形参传入No
2.delete方法要找到删除的结点--->遍历找到
2.1找到结尾,返回
2.2找到对应的No,返回
2.3否则,继续
*/
public voID del(int no){
heronode temp = head;
Boolean flag = false;
while(true){
if(temp.next == null){
break;
}
if (temp.next.no == no){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.next = temp.next.next;//JVM自动回收
System.out.println("delete ok");
}else{
System.out.printf("要删除的结点%d不存在",no);
}
}
}
实现思路:找到要插入节点的插入位置最为关键
temp.next == null
插入节点的编号 > temp的编号
temp.next.no > heronode.no
temp.next.no == heronode.no
注意
代码实现
public voID addByOrder(heronode heronodE){
heronode temp = head;
Boolean isExist = false;
while (temp.next != null){
if (temp.next.no > heronode.no){
break;
}else if(temp.next.no == heronode.no){
isExist = true;
break;
}
temp = temp.next;
}
if (isExist){
System.out.printf("准备插入的节点 %d 已存在\n",heronode.no);
}else {
heronode.next = temp.next;
temp.next = heronode;
}
}
/*
delete方法
1.删除要知道删除谁--->形参传入No
2.delete方法要找到删除的结点--->遍历找到
3.因为是单链表,无法得到前一个节点的信息,所以要找到目标节点时,temp指向的是目标节点的前一个节点.
*/
public voID delete(int no){
if (head.next == null){
System.out.println("单链表为空,无法删除");
return;
}
heronode temp = head;
Boolean isFound = false;
while(temp.next != null){
if (temp.next.no == no){
isFound = true;
break;
}
temp = temp.next;
}
if (isFound){
temp.next = temp.next.next;//JVM自动回收
System.out.println("delete ok");
}else{
System.out.printf("要删除的结点%d不存在\n",no);
}
}
/*
修改节点信息:以编号为基准,修改名字和昵称
*/
public voID update(heronode newheronodE){
//先判断链表为空的情况,这样可以避免创建两个临时使用的变量
if (head.next == null){
System.out.println("链表为空,无法修改");
return;
}
heronode temp = head.next;
Boolean isFound = false;
while (temp != null){
if (newheronode.no == temp.no){
isFound = true;
break;
}
temp = temp.next;
}
if (isFound){
temp.name = newheronode.name;
temp.nickname = newheronode.nickname;
}else{
System.out.printf("没有找到要修改的结点%d\n",newheronode.no);
}
}
以上是大佬教程为你收集整理的链表(Java实现)全部内容,希望文章能够帮你解决链表(Java实现)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。