链表
- 链表是以节点的方式来存储,是链式存储
- 每个节点包含 data 域, next 域:指向下一个节点.
- 链表的各个节点不一定是连续存储.
- 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定
单链表SingleLinkedList
package com.atguigu1;
public class SingleLinkedListDemo {
public static void main(String[] args) {
HeroNode1 heroNode1 = new HeroNode1(1, "宋江", "及时雨");
HeroNode1 heroNode2 = new HeroNode1(2, "卢俊义", "玉麒麟");
HeroNode1 heroNode3 = new HeroNode1(3, "吴用", "智多星");
HeroNode1 heroNode4 = new HeroNode1(4, "林冲", "豹子头");
SingleLinkedList singleLinkedList = new SingleLinkedList();
singleLinkedList.add(heroNode1);
singleLinkedList.add(heroNode4);
singleLinkedList.add(heroNode2);
singleLinkedList.add(heroNode3);
singleLinkedList.list();
}
}
class SingleLinkedList {
private HeroNode1 head = new HeroNode1(0, "", "");
public void add(HeroNode1 hero) {
HeroNode1 temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = hero;
}
public void list() {
if (head.next == null) {
System.out.println("无数据");
}
HeroNode1 temp = head.next;
while (true) {
if (temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}
class HeroNode1 {
public int no;
public String name;
public String nickName;
public HeroNode1 next;
public HeroNode1(int no, String name, String nickName) {
this.no = no;
this.name = name;
this.nickName = nickName;
}
public HeroNode1() {
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
单链表按照编号添加节点方法
public void addByOrder(HeroNode1 hero) {
HeroNode1 temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no > hero.no) {
break;
}
if (temp.next.no == hero.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.printf("英雄编号已经存在%的,无法加入", hero.no);
} else {
hero.next = temp.next;
temp.next = hero;
}
}