- 链表数据结构特点:增删效率非常高、查询效率非常低 时间复杂度为O(n)
- 链表分类:单链表、双链表、环形链表等。
- 链表数据结构 增加操作——不需要扩容的。
直接找到链表中最后一个节点(尾结点). next = 新增结点
示例代码
单向链表->双向链表
package com.collection.Demo08;
/**
* 手写单向链表->双向链表
*/
public class Node<E> {
private E v;//node 节点元素的值
Node<E> next;//当前节点指向下一个节点
Node<E> pred;//当前节点指向上一个节点
public static void main(String[] args) {
Node<String> node3 = new Node<>();
node3.v = "c";
Node<String> node2 = new Node<>();
node2.v = "b";
node2.next = node3;
Node<String> node1 = new Node<>();
node1.v = "a";
node1.next = node2;
node2.pred = node1;
node3.pred = node2;
// System.out.println(node1);
System.out.println("遍历节点");
showNode(node1);
System.out.println("新增节点");
Node<String> node4 = new Node<>();
node4.v = "d";
node4.pred=node3;
addNode(node3, node4);
showNode(node1);
System.out.println("删除node2");
node1.next = node3;
showNode(node1);
}
//根据该链表 从头遍历到尾部
public static void showNode(Node<?> node) {
Node<?> cuNode = node;//当前node节点
while (cuNode != null) {
System.out.println(cuNode.v);
cuNode = cuNode.next;
}
}
/**
* 链表数据结构 如何实现新增呢?
* 只需要找到链表中最后一个节点 .next = 新增节点
* 链表数据结构 不用考虑它的扩容性问题 只要内存足够就可以
* 不限的存放我们的数据
*/
public static void addNode(Node<String> tailNode, Node<String> newNode) {
tailNode.next = newNode;
}
}
下一篇文章:LinkedList 集合