一 链表定义
通过指针将一组零散的内存块串联在一起。
二 特点
(1)不需要连续的内存空间。
(2)有指针引用
(3)三种最常见的链表结构:单链表、双向链表和循环链表
三 单链表
头节点和最后一个节点。头节点用来记录链表 的基地址。尾节点 指向下一个空地址null
四 循环链表
尾节点指针指向链表 的头节点
五 双向链表
它支持两个方向,每个结点不止有一个后继指针next指向后面的结点,还有一个前驱指针prev指向前面的结点
基本操作
package yrz;
public class LinkedList {
private Node head ;
public void addHead(int data) {
Node headNode = new Node(data);
headNode.next = head;
head = headNode;
}
public void addMiddleData(int index,int data) {
if(index == 0) {
addHead(data);
}else {
Node headNode = new Node(data);
Node cur = head ;
for(int i = 0; i<index ; i++ ) {
cur = head.next;
}
headNode.next = cur.next;
cur.next = headNode;
}
}
public void deleteHeadNode() {
head = head.next;
}
public void deleteMiddleData(int index) {
if(index == 0) {
deleteHeadNode();
}else {
Node cur = head;
for(int i=0;i<index;i++) {
cur = head.next;
}
cur.next = cur.next.next;
cur.next.next = null;
}
}
public void print() {
Node cur = head;
while(cur!=null) {
System.out.print(cur.value);
cur = cur.next;
}
}
public void main(String[] args) {
LinkedList list = new LinkedList();
list.addHead(2);
list.addHead(1);
list.addHead(0);
list.print();
}
}
class Node{
Node next; //指向下一个节点的指针
int value; //节点值
Node(int value){
this.value = value ;
this.next = next ;
}
}