单链表(带头节点的)增删改查
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。
链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),
元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
结点结构
┌─────┬─────┐
│data │next │
└─────┴─────┘
data域--存放结点值的数据域
next域--存放结点的直接后继的地址(位置)的指针域(链域)
链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的,每个结点只有一个链域的链表称为单链表(Single Linked List)。
import java.util.TreeMap;
public class SingleLinkedListDemo {
public static void main(String[] args) {
HeroNode heroNode1 = new HeroNode(1, "lzl1");
HeroNode heroNode2 = new HeroNode(2, "lzl2");
HeroNode heroNode3 = new HeroNode(3, "lzl3");
HeroNode heroNode4 = new HeroNode(4, "lzl4");
HeroNode heroNode5 = new HeroNode(5, "lzl3");
SingleLinkedList singleLinkedList = new SingleLinkedList();
singleLinkedList.add2(heroNode1);
singleLinkedList.add2(heroNode2);
singleLinkedList.update(heroNode3);
singleLinkedList.list();
System.out.println("------------------");
singleLinkedList.delete(5);
singleLinkedList.list();
}
static class HeroNode {
public int no;
public String name;
public HeroNode next;
public HeroNode(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}
static class SingleLinkedList {
private HeroNode head = new HeroNode(0, "");
public void add(HeroNode heroNode) {
HeroNode temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = heroNode;
}
public void add2(HeroNode heroNode) {
HeroNode temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no > heroNode.no) {
break;
} else if (temp.next.no == heroNode.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("准备添加的编号 %d 已经存在" + heroNode.no);
} else {
heroNode.next = temp.next;
temp.next = heroNode;
}
}
public void update(HeroNode newNode) {
if (head.next == null) {
return;
}
HeroNode temp = head.next;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.no == newNode.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.name = newNode.name;
} else {
System.out.println("meiyou %d de jiedian" + newNode.no);
}
}
public void delete(int delNo) {
if (head == null) {
return;
}
HeroNode temp = head.next;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.no == delNo) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next = temp.next.next;
} else {
System.out.println("要删除的编号不存在");
}
}
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;
}
}
}
}
···