曾几何时学习过数据结构,记得不太清楚了,好像是12年前的大学C语言版。今天拿出现保留的唯一一本大学教材,翻看时感觉还是那么的经典,真心佩服我校老师的水平,只可惜了教材内部使用。
现在用JAVA实现单向列表,表头插入、随机修改、随机删除,为了简单易懂,顺序查找实现,水平有限希望同行吐槽。
package com.zhaoyx.util;
public class Test {
public static void main(String[] args) {
LinkNode<String> link = new LinkNode<String>();
link.addNode("String1");
link.addNode("String2");
link.addNode("String3");
System.out.println(link.getNode(0));
System.out.println(link.getNode(1));
System.out.println(link.getNode(2));
link.putNode(1, "String4");
System.out.println(link.getNode(1));
link.removeNode(1);
System.out.println(link.getNode(1));
}
}
class LinkNode<E> {
E object;
LinkNode<E> next;
int length = 0;
public LinkNode() {
}
public void addNode(E e) {
if(0 == length) {
next = new LinkNode<E>();
next.object = e;
} else {
LinkNode<E> head = new LinkNode<E>();
head.object = e;
head.next = next;
next = head;
}
length++;
}
public void removeNode(int index) {
if(index >= length) return;
LinkNode<E> n1 = next;
LinkNode<E> n2 = next;
for(int i = 0; i < index; i++) {
n1 = n2;
n2 = n2.next;
}
n1.next = n2.next;
n2.next = null;
length--;
}
public void putNode(int index,E e) {
if(index >= length) return;
LinkNode<E> n = next;
for(int i = 0; i < index; i++) {
n = n.next;
}
n.object = e;
}
public E getNode(int index) {
if(index >= length) return null;
LinkNode<E> n = next;
for(int i = 0; i < index; i++) {
n = n.next;
}
return n.object;
}
}
运行结果:
String3
String2
String1
String4
String1