链表
## 单链表
**1.定义:**
由多个结点组成,每一个结点都由一个**数据域**和**指针域**组成,**数据域用来存储数据**,**指针域用来指向其后继结点**。
链表的的**头结点的数据域不存数据**指针域指向第一个正真存储数据的结点。
##### 2.基本操作
根据此图容易理解:
代码:
```java
public class LinkList {
public static void main(String[] args) {
Node nodeA = new Node(1, "aaa", "AAA");
Node nodeB = new Node(2, "bbb", "BBB");
Node nodeC = new Node(3, "ccc", "CCC");
ListArray listArray = new ListArray();
listArray.insert(nodeA);
listArray.insert(nodeB);
listArray.insert(nodeC);
}
}
class ListArray {
// 初始化一个链表,头节点
private Node head = new Node(0, "", "");
// 得到头节点
public Node getHead() {
return head;
}
// 链表中插入元素
public void insert(Node node) {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = node;
}
// 遍历链表中元素
public void getList() {
if (head.next == null) {
System.out.println("链表为空");
return;
}
Node temp = head;
while (temp.next != null) {
System.out.println(temp.next);
temp = temp.next;
}
}
/**
* 在指定位置插入元素
*
* @param node
*/
public void add(Node node) {
Node temp = head;
// for (int i=0; i<=index-1; i++) {
// temp =temp.next;
// }
// node.next = temp.next;
// temp.next = node;
boolean flag = false;
while (true) {
if (temp.next == null) { // 到尾了,直接插入
break;
} else if (temp.next.no > node.no) {
break;
} else if (temp.next.no == node.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
System.out.println("节点已存在");
} else {
node.next = temp.next;
temp.next = node;
}
}
/**
* 修改链表
*
* @param node
*/
public void update(Node node) {
if (head.next == null) {
System.out.println("链表为空");
}
Node temp = head.next;
while (temp.no != node.no) {
if (temp == null) {
System.out.println("未找到元素");
return;
}
temp = temp.next;
}
temp.bName = node.bName;
temp.name = node.name;
}
/**
* 删除链表
*/
public void delete(Node node) {
Node temp = head;
while (temp.next != node) {
if (temp.next == null) {
System.out.println("未找到");
return;
}
temp = temp.next;
}
Node nextNode = temp.next;
temp.next = nextNode.next;
}
}
/**
* 创建节点Node
*/
class Node {
public int no;
public String name;
public String bName;
public Node next;
public Node(int no, String name, String bName) {
this.no = no;
this.name = name;
this.bName = bName;
}
@Override
public String toString() {
return "Node{" +
"no=" + no +
", name='" + name + '\'' +
", bName='" + bName + '\'' +
'}';
}
}
```