文章目录
- 1. 定义结点类
- 2. 定义SinglelinkedList类 实现链表操作
- 3. 测试单链表
1. 定义结点类
//定义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+"'"+"]";
}
2. 定义SinglelinkedList类 实现链表操作
1.add(Heronode heroNode) 添加节点到单向链表 的方法
2. list() 遍历显示链表
3. updata(Heronode node) 修改节点信息的方法
4. deleteNode(Heronode node) 删除指定节点(1)
5. delete(int no) 删除指定节点(2)
6. length(Heronode head) 获取到单链表的结点的个数
class SinglelinkedList{
//初始化头结点
private HeroNode head = new HeroNode(0,"","");
public HeroNode getHead() {
return head;
}
//添加节点到单向链表 的方法
public void add(HeroNode heroNode){
HeroNode temp = head;
while(true){
if(temp.next == null){
break;
}
temp = temp.next;
}
temp.next = heroNode;
}
//遍历显示链表
public void list(){
//判断链表是否为空
if(head.next == null){
System.out.println("链表为空");
return;
}
HeroNode temp = head.next;
while (true){
if (temp == null){
break;
}
System.out.println(temp);
//temp后移
temp = temp.next;
}
}
//修改节点信息的方法
public void updata(HeroNode node){
if (head.next == null){
System.out.println("链表为空");
return;
}
HeroNode temp = head.next;
boolean flag = false;
while(true){
if (temp == null){
break;//已经遍历完链表
}
if (temp.no == node.no){
//找到节点
flag = true;
break;
}
temp = temp.next; //向下一个节点移动
}
if (flag){
//找到节点,进行信息修改
temp.name = node.name;
temp.nickname = node.name;
System.out.println("修改成功");
}else {
//未找到节点
System.out.printf("没有找到编号为 %d的节点,无法修改信息",node.no);
System.out.println();
}
}
//删除指定节点(1)
public void deleteNode(HeroNode node) {
node.no = node.next.no;
node.name = node.next.name;
node.nickname = node.next.nickname;
node.next = node . next. next ;
}
//删除指定节点(2)
public void delete(int no){
HeroNode temp = head;
boolean flag = false;
while (true){
if (temp.next == null){
//遍历完
System.out.println("无满足条件的节点,无法删除");
return;
}
if (temp.next.no == no){
flag = true;
break;
//找到要删除的节点的上一个结点 {temp} {需要删除的node}
// temp.next = temp.next.next;
}
temp = temp.next;
}
if (flag){ //flag为true找到需要删除的上一个结点temp
temp.next = temp.next.next;
}else{
System.out.println("无满足条件的结点,无法删除");
}
}
///方法:获取到单链表的结点的个数(如果是带头结点的链表,需求不统计头结点)
public int length(HeroNode head){
if (head.next == null){
return 0;
}
HeroNode temp = head.next;
int length = 0;
while (temp != null){
length++;
temp = temp.next;
}
return length;
}
}
3. 测试单链表
public class SinglelinkedListDemo {
public static void main(String[] args) {
//创建节点,填入信息
HeroNode heroNode1 = new HeroNode(1,"地虎铠甲","地虎侠");
HeroNode heroNode2 = new HeroNode(2,"炎龙铠甲","炎龙侠");
HeroNode heroNode3 = new HeroNode(3,"黑犀铠甲","黑犀侠");
//创建链表
SinglelinkedList singlelinkedList = new SinglelinkedList();
//添加节点到链表中
singlelinkedList.add(heroNode1);
singlelinkedList.add(heroNode2);
singlelinkedList.add(heroNode3);
singlelinkedList.list();
//测试删除节点
//测试统计有效节点
System.out.println("-----------------");
int length = singlelinkedList.length(singlelinkedList.getHead());
System.out.println(length);
}
}