LinkedList手写2

比上一个版本新增了add(int index, E element)方法,使用了泛型

  1 /**
  2  * 新增泛型
  3  * remove方法
  4  * add方法(Obgect object)
  5  * get方法
  6  * getNode(int index)方法
  7  * 新增往指定位置插入方法add(int index,E element)
  8  * @author HQ
  9  * @e-mail ahmashq95@gmail.com
 10  * @date 2018/11/2.
 11  */
 12 public class LinkedList03<E> {
 13 
 14     private Node first;
 15     private Node last;
 16     private int size;
 17 
 18     public void remove(int index) {
 19         Node temp = getNode(index);
 20         if (temp != null) {
 21             Node up = temp.previous;
 22             Node down = temp.next;
 23             if (up != null) {
 24                 up.next = down;
 25             }
 26             if (down != null) {
 27                 down.previous = up;
 28             }
 29 
 30             //被删除的元素是第一个元素时
 31             if(index==0){
 32                 first=down;
 33             }
 34             //被删除的元素是最后一个元素时
 35             if(index==size-1){
 36                 last=up;
 37             }
 38             size--;
 39         }
 40     }
 41 
 42 
 43     public void add(int index,E element){
 44 
 45         checkRange(index);
 46         Node newNode=new Node(element);
 47         Node temp=getNode(index);
 48         if(temp!=null){
 49             Node up=temp.previous;
 50 
 51             up.next=newNode;
 52             newNode.previous=up;
 53 
 54             newNode.next=temp;
 55             temp.previous=newNode;
 56         }
 57         size++;
 58     }
 59     // [ ]
 60     //["a","b"]
 61     public void add(E object) {
 62         Node node = new Node(object);
 63 
 64         if (first == null) {
 65 
 66             node.previous = null;
 67             node.next = null;
 68 
 69             first = node;
 70             last = node;
 71         } else {
 72             node.previous = last;
 73             node.next = null;
 74 
 75             last.next = node;
 76             last = node;
 77         }
 78         size++;
 79     }
 80 
 81     @Override
 82     public String toString() {
 83         StringBuilder stringBuilder = new StringBuilder("[");
 84 
 85 
 86         Node temp = first;
 87         while (temp != null) {
 88             stringBuilder.append(temp.element + ",");
 89             temp = temp.next;
 90         }
 91         stringBuilder.setCharAt(stringBuilder.length() - 1, ']');
 92 
 93         return stringBuilder.toString();
 94     }
 95 
 96     public void checkRange(int index){
 97         if (index < 0 || index > size - 1) {
 98             throw new RuntimeException("索引位置不合法" + index);
 99         }
100     }
101     public E get(int index) {
102         checkRange(index);
103         Node temp = getNode(index);
104         return temp != null ? (E)temp.element : null;
105 
106     }
107 
108     private Node getNode(int index) {
109         checkRange(index);
110         Node temp = null;
111         //size>>1 相当于除以2
112         if (index < (size >> 1)) {
113             temp = first;
114             for (int i = 0; i < index; i++) {
115                 temp = temp.next;
116             }
117 
118         } else {
119             temp = last;
120             for (int i = size - 1; i > index; i--) {
121                 temp = temp.previous;
122 
123             }
124         }
125         return temp;
126 
127     }
128 
129     public static void main(String[] args) {
130         LinkedList03<String> list01 = new LinkedList03();
131 
132         list01.add("a");
133         list01.add("b");
134         list01.add("c");
135         list01.add("d");
136         list01.add("e");
137         list01.add("f");
138         list01.add(3,"黄强");
139         System.out.println(list01);
140         System.out.println(list01.get(3));
141     }
142 }

 

posted @ 2018-11-07 10:26  dreaming达摩  阅读(85)  评论(0)    收藏  举报