public class Node { private Integer data; private Node next; public Integer getData() { return data; } public void setData(Integer data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Node() { } public Node(Integer data, Node next) { this.data = data; this.next = next; } @Override public String toString() { return "Node{" + "data=" + data + ", next=" + next + '}'; } }
public class SuperLinked { // 链表的长度 private int size; // 链表的第一个结点 private Node first; // 链表的最后一个结点 private Node last; // 把数组添加到链表的尾部 public boolean add(Integer data) { // 把传入的数据构建成一个结点 Node node = new Node(data, null); // 如果现在链表是空的,那我就是第一个结点 if ( first == null ) { first = node; } else { // 如果链表不是空,那我就是最后一个结点 // 我应该是在原来的last结点后面 // 我是原来last结点的下一个结点 last.setNext(node); } last = node; size++; return true; } public Node getNode(int index) { if ( index < 0 ) { index = 0; } if ( index >= size - 1 ) { index = size - 1; } // 找到第index个 Node cursor = first; for (int i = 0; i < index; i++) { cursor = cursor.getNext(); } return cursor; } public boolean inputNode(int index, Integer data) { if ( getNode(index) == null ) return false; if ( getNode(index) != null ) { Node nodeN = new Node(data, getNode(index - 1)); getNode(index - 2).setNext(nodeN); size++; } return true; } public boolean removeLast() { if ( getNode(0) == null ) { return false; } else if ( size == 1 ) { first = null; size--; } else if ( getNode(0) != null ) { getNode(size - 2).setNext(null); last = getNode(size - 2); size--; } return true; } public boolean rewriteData(int index, Integer data) { getNode(index).setData(data); return true; } public int getSize() { return size; } }
public class Demo { public static void main(String[] args) { SuperLinked superLinked = new SuperLinked(); superLinked.add(1); superLinked.add(2); superLinked.add(3); superLinked.inputNode(2,25); superLinked.removeLast(); System.out.println(superLinked.getNode(0)); } }
数据结构的核心在于理解这些结构的创建和存在方式,然后再慢慢理解方法是如何完成的。
在理解的过程中需要记录方法名和方法作用,这样在遇到方法内调用方法时才能更快反应过来。
要善于总结,例如在学习这些数据结构时,我们会发现基本方法内容无外乎增删改查,偶尔出现特殊方法需要加以记忆。
要有耐心,这些数据结构确实构造难以理解且方法繁多,需要看到末尾甚至多次看完才可能有所理解。