一、概念:
链表(linked list):是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的.
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
二、链表的分类:
- 单向链表,双向链表
- 带头结点链表,不带头结点链表
- 循环的,非循环的
- 掌握循环语句
提示:本篇文章只是单纯写一下单链表的实现,入门级别
三、链表的结构:
图中所示为链表的一个节点,value是这个节点所存储的数据值,next为下一个节点的地址。
下面是5个节点的链表
四、代码实现链表:
1.创建节点类
节点由data域(数据域),以及next域(指针域)组成,对于next域,其是引用类型,存放下一个节点的地址,故
用public ListNode next来创建next。
同时设置构造函数,方便对data进行初始化。
class ListNode {
public int data;
public ListNode next;
public ListNode(int data) {
this.data = data;
}
// 增加链表元素
public void add(int newdata) {
ListNode nowNode=new ListNode(newdata);
if(this.next==null) {
this.next=nowNode;
}else {
this.next.add(newdata);
}
}
//打印链表
public void print() {
System.out.print(this.data);
if(this.next!=null) {
System.out.print("-->");
this.next.print();
}
}
}
2.创建链表
public class LinkedList {
public static void main(String args[]) {
ListNode node = new ListNode(1);//增添元素
node.add(2);//增添元素
node.add(3);//增添元素
node.print();//打印链表
}
}