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 }

浙公网安备 33010602011771号