概念
1.链表是链式存储,以节点的方式存储
2.链表包括data域,next域(对下一个链节点引用)
3.链表有带头节点和无头节点的链表
带头节点的图示
Java实现带头节点的单链表
public class SingleList {
// 初始化一个头节点
Node head = new Node(0, "");
//加入节点
public void addNode(Node node) {
Node tmp = head;
//判断是否是空链表,并且找到最后一个位置
while (true) {
if (tmp.next == null) {
break;
}
tmp = tmp.next;
}
//将新添加的元素加入到链表最后
tmp.next = node;
}
//删除一个节点
public void delNode(int no) {
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node tmp = head;
while (true) {
if (tmp.next.no == no) {
break;
}
tmp = tmp.next;
}
//判断链表有效节点数是否>1
// 如果只有一个则只剩余一个头节点,否则将待删除的后一个连接到待删除的上一个,实现删除功能
if (tmp.next.next == null) {
head.next = null;
} else {
tmp.next = tmp.next.next;
}
}
//遍历整个链表
public void display() {
System.out.println("**********");
Node tmp = head;
while (true) {
if (tmp.next == null) {
break;
}
System.out.println(tmp.next);
tmp = tmp.next;
}
System.out.println("**********");
}
}
/**
* 链表是以节点方式存储的
*/
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 "Node[ no=" + no + ",name =" + name + "]";
}
}