一、链表是什么?
链表(linked list)是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成
二、链表的基本操作
public class LinkedListNode {
Node head; //定义链表的头节点 /**
* 定义一个链表节点
*/
class Node {
int data; //数据
Node next; //指向下一个的指针
Node(int data) {
this.data = data;
}
}
/**
* 链表插入方法
*
* @param dataOne
* @Param index 链表插入的位置
*/
public void addNode(int dataOne, int index) {
//首先判断插入头节点,还是尾节点,还是中间位置
if (index < 0 || index > length()) {
return;
}
Node temp = new Node(dataOne);
//插入首节点
if (index == 0) {
temp.next = head;
head = temp;
}else if(index == length()) {
//插入尾节点
Node temp1 = head;
while(temp1.next != null){ //循环找到最后一位
temp1 = temp1.next;
}
temp1.next = temp;
}else {
//插入中间节点,先获取index-1位置的元素
Node node = get(index - 1);
// Node node1 = get(index + 1);
temp.next = node.next;
node.next = temp;
}
}
/**
* 根据索引删除链表元素
* @param index
*/
public void deleteByIndex(int index){
Node temp = null;
//删除首节点
if(index == 0) {
temp = head.next;
head = temp;
}else if(index== (length() - 1)) {
//删除尾元素
Node node = get(index - 1);
node.next =null;
}else {
Node removePre = get(index-1);
Node removeNext = get(index+1);
removePre.next = removeNext;
}
}
/**
* 根据index获取元素
* @param index
* @return
*/
public Node get(int index) {
if(head.next == null) {
throw new Exception("链表结构为空");
}
Node temp = head;
for (int i= 0;i< index;i++) {
temp = head.next;
}
return temp;
}
/**
* 遍历链表计算长度
*
* @return
*/
public int length() {
Node temp = head;
int count = 0;
while (temp.next != null) {
count++;
//将下一个元素赋值给当前元素
temp = temp.next;
}
return count;
}
总结
学习来自《小灰的算法之旅》加深个人记忆,在此记录,如有错误欢迎指出!