package SingleLinkedList;
public class SingleLinkedListDemo {
public static void main(String[] args) {
//测试类
heroNode h1 = new heroNode(1,"宋江","及时雨");
heroNode h4 = new heroNode(4,"张顺","浪里白条");
heroNode h3 = new heroNode(3,"李逵","黑旋风");
heroNode h2 = new heroNode(2,"吴用","智多星");
heroNode h5 = new heroNode(3,"林冲","豹子头");
SingleLinkedList sll = new SingleLinkedList();
sll.addNode(h1);
sll.addNode(h4);
sll.addNode(h3);
sll.addNode(h2);
sll.list();
sll.queryNode(2);
sll.updateNode(h5);
sll.deleteNode(3);
sll.list();
}
}
//封装节点信息
class heroNode {
int no;
String name;
String nickname;
heroNode next;//保存下一个节点的地址
//在构造器中对节点进行初始化
public heroNode(int no, String name, String nickname) {
this.no = no;
this.name = name;
this.nickname = nickname;
}
//便于显示,重写toString方法
@Override
public String toString() {
return "heroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
}
//创建单链表
class SingleLinkedList {
//新建一个头节点
heroNode head = new heroNode(0, "", "");
//增加节点方法(按照编号大小顺序)
public void addNode(heroNode node) {
//头节点不能动,所以使用变量
//需要向后移动temp使用while循环
//跳出循环不知道是否插入成功,这里使用一个flag
boolean flag = false;
heroNode temp = head;
while (true) {
if (temp.next == null) {
temp.next = node;
flag = true;
break;
}
if (temp.no == node.no) {
System.out.println("当前节点已经存在!");
break;
}
if (node.no < temp.next.no) {
node.next = temp.next;
temp.next = node;//这是插入节点语句
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.printf("编号为%d插入成功~~~\n",node.no);
} else {
System.out.println("没成功");
}
}
//删除节点
public void deleteNode(int no) {
boolean flag = false;
heroNode temp = head;
if (head.next == null) {
System.out.println("当前链表为空,无法删除");
}
while (true) {
if (temp == null) {
System.out.println("没有找到该节点");
break;
}
if (temp.next.no == no) {
temp.next = temp.next.next;//删除语句
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("删除成功");
} else {
System.out.println("没找到,删除失败");
}
}
//修改节点
//注意,这里面只能修改no以外的变量,否则为增加节点了
public void updateNode(heroNode node) {
heroNode temp = head;
if (head.next == null) {
System.out.println("链表为空");
}
while (true) {
if (temp == null) {
System.out.println("未找到改节点,无法修改");
break;
}
if (temp.no == node.no) {
temp.name = node.name;
temp.nickname = node.nickname;
System.out.println("修改完毕");
break;
}
temp = temp.next;
}
}
//查找节点
public void queryNode(int no){
heroNode temp = head;
if (head.next == null) {
System.out.println("链表为空");
}
while (true) {
if (temp == null) {
System.out.println("未找到改节点");
break;
}
if (temp.no == no) {
System.out.println("找到了");
System.out.println(temp);
break;
}
temp = temp.next;
}
}
//遍历输出当前节点
public void list(){
heroNode temp = head.next;
if(head.next == null){
System.out.println("链表为空");
}
while(true){
if(temp == null){
break;
}else{
System.out.println(temp);
}
temp = temp.next;
}
}
}
带头节点的单链表的增删查改
最新推荐文章于 2024-08-29 18:44:48 发布