本节介绍链表
目录
1.什么是链表
1.1链表定义
1.2链表分类
2.链表实现
2.1创建链表
1)手动创建
2)创建链表类进行管理链表的相关操作
2.2添加元素
1)头插法
2)尾插法
3)任意位置插入
2.3删除
2.4查找
1)返回节点
2)返回索引
链表是一种数据结构,它由一系列节点组成。每个节点包含至少两部分信息:数据域(用于存储数据元素)和指针域(用于存储指向下一个节点的引用或地址)。链表通过节点之间的指针连接,形成一个链式结构。
与数组不同:1.数组中的元素在内存中是连续存储的,而链表的节点在内存中的存储位置不一定是连续的。2.链表它在插入和删除操作上相对数组更加灵活
即自己创建一个node类然后调用
package com.qcby;
public class Node {
Node next;
int value;
public static void main(String[] args) {
Node node1 = new Node();
node1.value = 1;
Node node2 = new Node();
node2.value = 2;
node1.next = node2;
System.out.println(node1.value);
System.out.println(node1.toString());
}
public String toString() {
return "Node[" +
"next=" + next +
", value=" + value +
']';
}
}
使用 LinkList list = new LinkList();
创建链表
头插法就是每次有一个新的元素进入链表时,将新节点插入到链表的头部,使其成为新的头节点。
代码如下:
public void addHead(int value) {
Node node=new Node(value);
if(head==null) {
head=node;
return;
}
node.next=head;
head=node;
}
当每次链表接受新的元素时,将新节点插入到链表的尾部,使其成为新的尾节点。
代码如下:
public void add(int data) {
Node node = new Node();
node.value = data;
if (head == null) {
head = node;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = node;
}
}
在接收到新元素时,给新元素的位置做规定,即任意位置插入是将新节点插入到链表的指定位置。
代码:
public void addIndex(int index, int data) {
Node node = new Node();
node.value = data;
if (index < 0 || index > getLength()) {
System.out.println("超出范围");
return;
}
if (index == 0) {
addHead(data);
} else {
Node temp = head;
for (int i = 0; i < index - 1; i++) {
temp = temp.next;
}
node.next = temp.next;
temp.next = node;
}
}
注意:想要实现任意位置插入,需要关注其链表长度,防止该插入位置比链表长度大出现问题
即实现一个求解长度的类,主要是通过遍历链表节点来记录长度:
public int getLength() {
int length = 0;
Node temp = head;
while (temp != null) {
length++;
temp = temp.next;
}
return length;
}
public void remove(int data) {
if (head == null) {
System.out.println("链表为空");
return;
}
if (head.value == data) {
head = head.next;
return;
}
Node temp = head;
while (temp.next != null) {
if (temp.next.value == data) {
temp.next = temp.next.next;
return;
}
temp = temp.next;
}
}
public Node find(int data) {
Node temp = head;
while (temp != null) {
if (temp.value == data) {
return temp;
}
temp = temp.next;
}
return null;
}
public int findIndex(int data) {
Node temp = head;
int index = 0;
while (temp != null) {
if (temp.value == data) {
return index;
}
temp = temp.next;
index++;
}
return -1;
}