什么是链表
非连续、非顺序的存储结构(链式存储)
1.单链表
单链表可以看作是火车一样拼接。链表存储数据的同时也要存储下一个节点在什么位置
(1).单链表基本知识和使用
//一个节点
public class Node {
// 节点内容
int data;
// 下一个节点
Node next;
public Node(int data) {
this.data = data;
}
/* 版本1:为节点追加节点,向后找,一直找到它没有下一个节点此时再添加新的节点
public void append(Node node) {
this.next = node;
}
*/
/* 版本2(循环currentNode和nextNode的不断向后跳动):为节点追加节点,向后找,一直找到它没有下一个节点此时再添加新的节点
public void append(Node node) {
当前节点currentNode
Node currentNode = this;
循环向后找
while(true) {
当前节点的下一个节点nextNode
Node nextNode = currentNode.next;
如果没有下一个节点,即下一个节点为null,此时的currentNode节点为最后一个节点
if(nextNode == null) {
break;
}
再把下一个节点赋给当前节点
currentNode = nextNode;
}
把需要追加的节点追加为currentNode的nextNode
currentNode.next = node;
}
*/
// 版本3(把节点对象自己返回去,可以无限向后追加,链式编程):为节点追加节点,向后找,一直找到它没有下一个节点此时再添加新的节点
public Node append(Node node) {
//当前节点currentNode
Node currentNode = this;
//循环向后找
while(true) {
//当前节点的下一个节点nextNode
Node nextNode = currentNode.next;
//如果没有下一个节点,即下一个节点为null,此时的currentNode节点为最后一个节点
if(nextNode == null) {
break;
}
//再把下一个节点赋给当前节点
currentNode = nextNode;
}
//把需要追加的节点追加为currentNode的nextNode
currentNode.next = node;
return this;
}
// 获取下一个节点
public Node next() {
return this.next;
}
// 获得这个结点的内容