一、Node类定义
class Node{
public int no;
public String name;
public Node next;
public Node(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", next=" + next +
'}';
}
}
二、定义SingleLinkedList类封装对节点的操作
class SingleLinkedList{
Node head = new Node(0,"");
public void add(Node heroNode){
Node temp = head;
while (true){
if (temp.next == null){
break;
}
temp = temp.next;
}
temp.next = heroNode;
}
public void addByOrder(Node node){
Node temp = head;
boolean flag = false;
while (true){
if (temp.next == null){
break;
}
if (temp.next.no > node.no){
break;
}else if (temp.next.no == node.no){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
System.out.printf("准备插入的节点编号 %d 已经存在了, 不能加入\n",node.no);
}else {
node.next = temp.next;
temp.next = node;
}
}
public void update(Node heroNode){
Node temp = head;
boolean flag = false;
while (true){
if (temp.next == null){
break;
}
if (temp.next.no == heroNode.no){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.next.name = heroNode.name;
}else {
System.out.printf("没有找到索引值为 %d 的节点",heroNode.no);
}
}
public void delete(int no){
Node 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;
}else {
System.out.println("链表为空!!!!");
}
}
public void list(){
Node temp = head.next;
if (temp == null){
System.out.println("链表为空");
return;
}
while (true){
if (temp == null){
System.out.println("链表到头了");
return;
}
System.out.println(temp);
temp = temp.next;
}
}
}
三、添加main方法进行测试
public static void main(String[] args) {
SingleLinkedList singleLinkedList = new SingleLinkedList();
singleLinkedList.addByOrder(new Node(1,"张三"));
singleLinkedList.addByOrder(new Node(3,"李四"));
singleLinkedList.addByOrder(new Node(2,"王五"));
singleLinkedList.addByOrder(new Node(5,"赵六"));
System.out.println("------------修改前-----------");
singleLinkedList.list();
singleLinkedList.update(new Node(3,"李四四~~~~~~~~~"));
System.out.println("------------修改后-----------");
singleLinkedList.list();
System.out.println("------------删除节点-----------");
singleLinkedList.delete(1);
System.out.println("删除序号为:" + 1 + "的节点后");
singleLinkedList.list();
}
四、测试结果
------------修改前-----------
HeroNode{no=1, name='张三', next=HeroNode{no=2, name='王五', next=HeroNode{no=3, name='李四', next=HeroNode{no=5, name='赵六', next=null}}}}
HeroNode{no=2, name='王五', next=HeroNode{no=3, name='李四', next=HeroNode{no=5, name='赵六', next=null}}}
HeroNode{no=3, name='李四', next=HeroNode{no=5, name='赵六', next=null}}
HeroNode{no=5, name='赵六', next=null}
链表到头了
------------修改后-----------
HeroNode{no=1, name='张三', next=HeroNode{no=2, name='王五', next=HeroNode{no=3, name='李四四~~~~~~~~~', next=HeroNode{no=5, name='赵六', next=null}}}}
HeroNode{no=2, name='王五', next=HeroNode{no=3, name='李四四~~~~~~~~~', next=HeroNode{no=5, name='赵六', next=null}}}
HeroNode{no=3, name='李四四~~~~~~~~~', next=HeroNode{no=5, name='赵六', next=null}}
HeroNode{no=5, name='赵六', next=null}
链表到头了
------------删除节点-----------
删除序号为:1的节点后
HeroNode{no=2, name='王五', next=HeroNode{no=3, name='李四四~~~~~~~~~', next=HeroNode{no=5, name='赵六', next=null}}}
HeroNode{no=3, name='李四四~~~~~~~~~', next=HeroNode{no=5, name='赵六', next=null}}
HeroNode{no=5, name='赵六', next=null}
链表到头了