一:引言
实现的方法 LinkList类都有 自带的 可以直接调用 ,这是为了熟悉底层代码 敲了一下基本用法 ,主要以高琪老师讲的来写
二:上码
package cn.wyj.two;import java.awt.image.RasterFormatException;/**自定义一个链表* @param args*/public class Demo2_LinkedList<E> {private Node first;private Node last;private int size = 0;public void add(E element)//alt + shift + R 可以直接改{Node node = new Node(element);if(first == null){first = node;last = node;}else{node.previous = last;node.next = null;//尾插法last.next = node;last = node;} this.size++;}//元素个数public int size(){return this.size;}//删除索引位置元素public void remove(int index){checkRange(index);Node temp = getNode(index);if(temp != null){Node up = temp.previous;Node down = temp.next;if(up != null){up.next = down;}if(down != null){down.previous = up;}if(index == 0){first = down;}if(index == size-1){last = up;}}}//在指定位置插入元素public void add(int index,E element){checkRange(index);Node newNode = new Node(element);Node temp = getNode(index);if(temp!= null){if(index == 0){newNode.next = first;first.previous = newNode;newNode.previous = null;first = newNode;}if(index == size - 1){temp.next = newNode;newNode.previous = temp;}else{Node up = temp.previous;up.next = newNode;newNode.previous = up;temp.previous = newNode;newNode.next = temp;} } this.size++;}//获取索引位置的元素//a b c d e f g//0 1 2 3 4 5 6 public Object get(int index){checkRange(index);Node temp = getNode(index);return temp!=null?temp.element:null;}public Node getNode(int index){Node temp = null;if(index <= ( size()>>1)){temp = first;for( int i = 0; i < index; i++ ){temp = temp.next;} }else{temp = last;for( int j = size-1; j > index; j--){//System.out.println(i);temp = temp.previous;}}return temp;}private void checkRange(int index){if(index < 0 || index >= size){throw new RasterFormatException("索引位置不合法"+index);}}//重写toString()方法public String toString(){StringBuilder sb = new StringBuilder();sb.append("[");Node temp = first;while( temp != null){sb.append(temp.element+"、");temp = temp.next;}sb.setCharAt(sb.length()-1, ']');return sb.toString();}public static void main(String[] args) {// TODO Auto-generated method stubDemo2_LinkedList<String> l1 = new Demo2_LinkedList<String>();l1.add("a");l1.add("b");l1.add("c");l1.add("d");l1.add("e");l1.add("f");l1.add("g");System.out.println(l1);System.out.println(l1.size());Object obj = l1.get(5);System.out.println(obj);// l1.remove(6);
// System.out.println(l1);
l1.remove(3);
System.out.println(l1);
// l1.remove(4);
// System.out.println(l1);l1.add(0, "王老二");System.out.println(l1);}}
结点类:
package cn.wyj.two;public class Node {Node previous;Node next;Object element;public Node() {super();}public Node(Object element) {super();this.element = element;}public Node(Node previous, Node next, Object element) {super();this.previous = previous;this.next = next;this.element = element;}}