用节点类储存数据。
/** * 链表储存结构实现顺序表 * @param <E> */ public class LinkedList<E> { // 头节点 private LinkedNode<E> first; // 尾节点 private LinkedNode<E> last; // 顺序表内储存的数据个数 private int size = 0; // 初始化 public LinkedList(){ first = new LinkedNode<>(); // 空的头节点 last = first; } // 获取总元素个数 public int getSize(){ return size; } // 添加元素 public void add(E e){ LinkedNode<E> node = new LinkedNode<>(); node.setData(e); last.next = node; last = node; size++; } // 在某一位置插入数据 public void add(int index, E e){ if(index > size) System.out.println("插入位置错误!!!"); else{ LinkedNode<E> node = new LinkedNode<>(); LinkedNode<E> head = first; node.setData(e); // 找到要插入位置的前一个节点 for(int i = 0;i < index;i ++){ head = head.next; } // 插入末尾,改变尾节点 if(index == size){ last = node; } node.next = head.next; head.next = node; size ++; } } // 删除某一位置的元素 public E remove(int index){ E e = null; if(index > size - 1 || size == 0) System.out.println("删除位置错误!!!"); else{ // 找到要删除的节点的前一个 LinkedNode<E> node = first; for(int i = 0;i < index;i ++){ node = node.next; } // 如果删除的是最后一个元素,改变尾节点 if(index == size -1){ last = node; } e = node.next.getData(); node.next = node.next.next; size --; } return e; } // 删除第一个元素 public E removeFirst(){ return remove(0); } // 删除最后一个元素 public E removeLast(){ return remove(size - 1); } // 获取某一位置的元素 public E get(int index){ E e = null; if(index > size - 1 || size == 0) System.out.println("查找位置错误!!!"); else{ // 找到要查找的节点 LinkedNode<E> node = first.next; for(int i = 0;i < index;i ++){ node = node.next; } e = node.getData(); } return e; } // 获取第一个元素 public E getFirst(){ E e = null; if(size != 0) e = first.next.getData(); return e; } // 获取第最后一个元素 public E getLast(){ E e = null; if(size != 0) e = last.getData(); return e; } }
/** * 链表节点 * @param <E> */ public class LinkedNode<E> { private E data; // 储存的数据 public LinkedNode<E> next; // 给该节点数据赋值 public void setData(E e){ data = e; } // 获取该节点数据值 public E getData(){ return data; } }
package 线性表; /** * 链表测试类 */ public class LinkedList_Demo { // 输出相关数据 public static void print(LinkedList linkedList){ System.out.println("元素个数:" + linkedList.getSize()); System.out.println(linkedList.getFirst()); System.out.println(linkedList.get(1)); System.out.println(linkedList.getLast()); } public static void main(String[] args){ LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("the"); linkedList.add(0,"hello"); linkedList.add(2,"word!"); print(linkedList); // 删除两个 linkedList.remove(0); linkedList.remove(0); System.out.println("元素个数:" + linkedList.getSize()); // 添加元素 linkedList.add("www"); linkedList.add(0,"http://"); print(linkedList); } }
结果: 元素个数:3 hello the word! 元素个数:1 元素个数:3 http:// word! www