链表的概念和结构
链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。
(1).实际中链表的结构非常多样
- 带头,不带头
- 单向,双向
- 循环,非循环
无头单向非循环链表
- 每个节点都会有两个域,一个是值域用来存放数据,另一个节点域用来存放下一个节点的地址,这样让每个节点都连起来。(假设0x222是数据2的地址,那么数据1的节点域存放0x222就将两个节点链接起来)。
那么如何实现一个链表呢?
1.首先我们创建一个类Node代表节点
class Node{
public int val; //表示值域
public Node next; //表示节点域 没有初始化默认值为null
//带一个参数的构造方法
//为什么不给两个参数,因为你在new节点的时候不知道下一个节点是谁
public Node(int val){
this.val = val;
}
}
2.链表的实现:头插法
//看链表是不是为空,定义一个头结点
public Node head = null;
public void addFirst(int data){
//首先通过传过来的数据new一个节点
Node node = new Node(data);
//判断链表是否为空
if(this.head == null){
//如果为空,那么只需要将head指向node;
this.head = node;
return;//结束方法
}
//不为空
Node cur = this.head;//让cur指向头结点
this.head = node;//再让头节点指向新的节点node
node.next = cur;//最后修改node的指向,让他的节点域存储cur的地址(也就是原始头结点的地址)
}
3.尾插法
public voi