java宋江,Java编程内功-数据结构与算法「单链表」,

package com.structures.linkedlist;

public class SingleLinkedListDemo {

public static void main(String[] args) {

HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨");

HeroNode heroNode2 = new HeroNode(2, "卢俊义", "玉麒麟");

HeroNode heroNode3 = new HeroNode(3, "吴用", "智多星");

HeroNode heroNode4 = new HeroNode(4, "林冲", "豹子头");

SingleLinkedList singleLinkedList = new SingleLinkedList();

singleLinkedList.addByNo(heroNode3);

singleLinkedList.addByNo(heroNode2);

singleLinkedList.addByNo(heroNode4);

singleLinkedList.addByNo(heroNode1);

singleLinkedList.list();

}

}

//定义SingleLinkedList管理我们的英雄

class SingleLinkedList {

//先初始化一个头节点,头节点不能动,将来遍历用

private HeroNode head = new HeroNode(0, "", "");

//添加节点到单向链表

//思路:当不考虑编号的顺序时

//1. 找到当前链表的最后节点

//2. 将最后这个节点的next域指向新的节点

public void add(HeroNode node) {

//因为head节点不能动,因此我们需要一个辅助遍历temp

HeroNode temp = head;

//遍历链表,找到最后

while (temp.next != null) {

//找到链表的最后

//如果没有找到temp就后移

temp = temp.next;

}

temp.next = node;

}

//第二种添加英雄的方式,在添加英雄时,根据排名将英雄插入到指定位置

//如果有这个排名,则添加失败,并给出提示

public void addByNo(HeroNode heroNode) {

//因为head节点不能动,因此我们需要一个辅助遍历temp

//因为单链表,因此找的temp是位于添加位置的前一个节点,否则加入不了

HeroNode temp = head;

boolean flag = false;//标识添加的编号是否存在,默认false

while (true) {

if (temp.next == null) {

break;

}

if (temp.next.no > heroNode.no) {//位置找到,就在temp的后面插入

break;

} else if (temp.next.no == heroNode.no) {

//编号已存在

flag = true;

break;

}

temp = temp.next;

}

if (flag) {

System.out.printf("准备插入的英雄的编号 %d 已存在,不能加入\n", heroNode.no);

} else {

//插入链表temp的后面

heroNode.next = temp.next;

temp.next = heroNode;

}

}

//显示链表[遍历]

public void list() {

//判断链表是否为空

if (head.next == null) {

System.out.println("链表为空");

}

//因为头节点不能动,因此我们需要一个辅助变量来遍历

HeroNode temp = head.next;

while (temp != null) {

//判断是否到最后

//输出节点的信息

System.out.println(temp);

//将temp后移

temp = temp.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;

}

public HeroNode getNext() {

return next;

}

public void setNext(HeroNode next) {

this.next = next;

}

@Override

public String toString() {

return "HeroNode{" +

"no=" + no +

", name='" + name + '\'' +

", nickName='" + nickName + '\'' +

'}';

}

}

/*

HeroNode{no=1, name='宋江', nickName='及时雨'}

HeroNode{no=2, name='卢俊义', nickName='玉麒麟'}

HeroNode{no=3, name='吴用', nickName='智多星'}

HeroNode{no=4, name='林冲', nickName='豹子头'}

*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值