现在程序开发过程中,如果需要用到链表这种逻辑存储关系的集合,都直接试用jdk自带的linkedList集合就可以满足业务需要了,但最近在重新回顾数据结构的时候发现数据结构教材中的代码示例大部分都是用C实现的,所以就想把课程中用到的示例代码翻译成java语言。在复习单链表过程中,跟着教材敲单链表的定义和插入及删除元素时,才发现真正在实现单链表这种数据结构时其实需要考虑的细节还是挺多的,这个示例也是在参考jdk包中的LinkedList的实现实现过程写出来的,可以理解成既是一个重新学习数据结构的过程也是学习jdk自带底层jar包逻辑的过程。示例代码中定义了三个类,分别是Node节点类、测试启动类、SingleList单链表类,只实现了部分方法,具体细节在jdk自带的LinkedList中实现了更多的方法,可以好好学习一下。
package dataStructure;
public class SingleListTest {
public static void main(String args[]) {
/*
* 定义四个节点,分别是1,2,3,4
*/
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
SingleList list = new SingleList();
list.addNode(node1);
list.addNode(node2);
list.addNode(node3);
list.addNode(node4);
/*
* 插入node
*/
Node node5 = new Node(5);
list.insertNode(node5, 1);
/*
* 删除node
*/
list.deleteNode(2);
System.out.println("success!!!!");
}
}
package dataStructure;
/*
* 单链表的元素节点包括两个部分,一个是元素对象本身,一个是指向下一个节点的元素
*/
public class SingleList {
int size = 0;
Node first = new Node();// 第一个节点
Node last;// 最后一个节点
// 在第i个元素位置添加一个新的节点
public void insertNode(Node node, int i) {
Node tempNode = first;
Node nextNode = first.next;
for (int k = 1; k <= i; k++) {
if (k == i) {
Node newTemp = tempNode.next;
tempNode.next = node;
node.next = newTemp;
if (i == size) {
last = node;
}
size++;
} else {
tempNode = nextNode;
nextNode = tempNode.next;
}
}
}
// 删除第i个元素节点
public void deleteNode(int i) {
Node preNode = first;
Node tempNode = first.next;
for (int k = 1; k <= i; k++) {
if (k == i) {
if (i == size) {
preNode.next = null;
last = preNode;
} else {
preNode.next = tempNode.next;
}
size--;
} else {
preNode = tempNode;
tempNode = tempNode.next;
}
}
}
// 构造单链表
public void addNode(Node node) {
if (size == 0) {
first.next = node;
last = node;
} else {
Node temp = last;
last = node;
temp.next = node;
}
// 添加元素成功,则size加1
size++;
}
}
package dataStructure;
public class Node {
int data;//数据本身
Node next;//下一个节点
public Node(int data) {
this.data = data;
}
public Node(int data,Node next) {
this.data = data;
this.next = next;
}
public Node() {
// TODO Auto-generated constructor stub
}
}