单链表
package algorithm.linkedlist;
public class SingleLinkedListDemo {
public static void main(String[] args) {
SingleLinkedList list = new SingleLinkedList();
HeroNode node1 = new HeroNode(1, "孙悟空", "大师兄");
HeroNode node2 = new HeroNode(2, "猪八戒", "二师兄");
HeroNode node3 = new HeroNode(3, "沙悟净", "三师兄");
HeroNode node4 = new HeroNode(4, "敖烈", "小白龙");
list.addByOrder(node3);
list.addByOrder(node1);
list.addByOrder(node4);
list.addByOrder(node2);
list.list();
System.out.println("--------------修改后-------------");
list.update(new HeroNode(3, "牛魔王", "孙悟空兄弟~~"));
list.list();
list.update(new HeroNode(32, "牛魔王", "孙悟空兄弟~~"));
System.out.println("---------------删除节点-------------");
HeroNode deleteByNo = list.deleteByNo(1);
list.deleteByNo(4);
list.list();
System.out.println("----------------查找------------------");
HeroNode findByNo = list.findByNo(3);
System.out.println("找到" + findByNo.name + "节点");
}
}
class SingleLinkedList {
private HeroNode head = new HeroNode(0, "头节点", "");
public HeroNode getHead() {
return head;
}
public void setHead(HeroNode head) {
this.head = head;
}
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.next;
}
}
public void add(HeroNode node) {
HeroNode temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = node;
}
public void addByOrder(HeroNode node) {
HeroNode 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("插入的节点的no=%d已存在", node.no);
} else {
node.next = temp.next;
temp.next = node;
}
}
public void update(HeroNode node) {
if (head.next == null) {
System.out.println("空链表");
return;
}
HeroNode temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.no == node.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.name = node.name;
temp.nickName = node.nickName;
} else {
System.out.printf("没找到%d的节点信息\n", node.no);
}
}
public HeroNode deleteByNo(int no) {
if (head.next == null) {
throw new RuntimeException("链表空");
}
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) {
HeroNode val = temp.next;
temp.next = temp.next.next;
return val;
} else {
throw new RuntimeException("没找到" + no + "节点");
}
}
public HeroNode findByNo(int no) {
HeroNode temp = head.next;
while (true) {
if (temp == null) {
break;
}
if (temp.no == no) {
return temp;
}
temp = temp.next;
}
throw new RuntimeException("未找到"+no+"节点");
}
}
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;
}
@Override
public String toString() {
return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName + "]";
}
}