链表
链表节点设计:
class Node{
Object data;
Node next;
}
/*
链表的插入、删除和遍历
*/
public class LinkedList {
public static void main(String[] args) {
MyLinkedList my = new MyLinkedList();
my.addNode(new Object[]{1, 2, 3});
my.addNode(new Object[]{4, 5, 6});
my.addNode(new Object[]{7, 8, 9});
System.out.println(my.length());
my.deleteNode(1);
my.say();
}
}
class Node {
Object[] data;
Node next = null;
Node(Object[] data) {
this.data = data;
}
}
// 用于存放数组
class MyLinkedList {
Node head = null;
//往链表末尾插入节点
public void addNode(Object[] data) {
Node newNod = new Node(data);
Node temp = head;
if (head == null) { //如果头节点是空的,把新节点赋值给头节点
head = newNod;
System.out.println("加入节点成功");
return;
}
while (temp.next != null) { // temp往后移动找到最后一个节点
temp = temp.next;
}
temp.next = newNod;
System.out.println("加入节点成功");
}
// 计算节点长度
public int length() {
int length = 0;
Node temp = head;
while (temp != null) {
temp = temp.next;
length++; //temp往后移动并计数直到最后一个节点
}
return length;
}
// 删除节点
public void deleteNode(int index) { // 从0开始
if (index < 0 || index >= length()) {
System.out.println("删除节点失败");
return;
}
if (index == 0) {
head = head.next; //如果要删除头节点,把头节点后一个节点赋值给头节点
System.out.println("删除节点失败");
return;
}
Node temp = head;
Node nextTemp = temp.next;
int count = 1;
while (true) {
if (count == index) {
temp.next = nextTemp.next;
System.out.println("删除节点成功");
return;
}
temp = temp.next;
nextTemp = nextTemp.next; // temp节点和temp后面的节点依次往后移动直到找到要删除节点的下标
count++;
}
}
// 输出链表所有元素
public void say() {
Node temp = head;
while (temp != null) {
for (int i = 0; i < temp.data.length; i++) {
System.out.print(temp.data[i] + " ");
}
temp = temp.next;
}
System.out.println();
}
}