链表是一种常见的基础数据结构,它是一种线性表,但在内存中它并不是顺序存储的,它是以链式进行存储的,每一个节点里存放的是下一个节点的“指针”。在Java中的数据分为引用数据类型和基础数据类型,在Java中不存在指针的概念,但是对于链表而言的指针,指的就是引用数据类型的地址。
链表和数组都是线性的数据结构,对于数组而言其长度是固定的,由于在内存中其是连续的,因此更适合做查找与遍历,而链表在内存中是并不是顺序存储的,但是由于其是通过“指针”构成的,因此在插入、删除时比较数组更为的方便。
下面的代码通过内部类并结合递归的方式来实现了一个简单的用Java语言描述的链表的数据结构。
首先来看一下,链表数据结构的定义,代码如下:
1 class NodeManager { 2 private Node root; // 根节点 3 private int currentIndex = 0; // 节点的序号,每次操作从0开始 4 5 public void add(int data) {} 6 public void delNode(int data) {} 7 8 public void print() {} 9 10 public boolean findNode(int data) {} 11 12 public boolean updateNode(int oldData, int newData) {} 13 14 // 向索引之前插入 15 public void insert(int index, int data) {} 16 17 // 谁拥有数据,谁提供方法 18 class Node { 19 private int data; 20 private Node next; // 把当前类型作为属性 21 22 public Node(int data) { 23 this.data = data; 24 } 25 26 public void setData(int data) { 27 this.data = data; 28 } 29 30 public int getData() { 31 return data; 32 } 33 34 // 添加节点 35 public void addNode(int data) {} 36 37 // 删除节点 38 public void delNode(int data) {} 39 40 // 输出所有节点 41 public void printNode() {} 42 43 // 查找节点是否存在 44 public boolean findNode(int data) {} 45 46 // 修改节点 47 public boolean updateNode(int oldData, int newData) {} 48 49 // 插入节点 50 public void insertNode(int index, int data) {} 51 } 52 }