《超越善惡2》開發團隊還在開發一個未公佈的新遊戲
阿新 • • 發佈:2021-07-05
前言
連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個結點地址的指標域。
具體實現
- 實現類
public class LinkedList<T> { /** * 連結串列節點 */ private class Node { public T t; public Node next; public Node(T t, Node next) { this.t = t; this.next = next; } public Node(T t) { this(t, null); } public Node() { this(null, null); } @Override public String toString() { return t.toString(); } } /** * 虛擬頭結點 */ private Node dummyHead; /** * 連結串列大小 */ private int size; public LinkedList(){ dummyHead = new Node(null, null); size = 0; } /** * 獲取連結串列中的元素個數 * @return */ public int getSize() { return size; } /** * 連結串列是否為空 * @return */ public boolean isEmpty() { return size == 0; } /** * 在連結串列的index(0-based)位置新增元素 */ public void add(int index, T t) { if (index < 0 || index > size) { throw new IllegalArgumentException("Add failed, Illegal index."); } Node prev = dummyHead; for (int i = 0; i < index; i++) { prev = prev.next; } prev.next = new Node(t, prev.next); size ++; } /** * 在連結串列頭新增新的元素 * @param t */ public void addFirst(T t) { // Node node = new Node(t); // node.next = head; // head = node; add(0, t); } /** * 在連結串列末尾新增元素 * @param t */ public void addLast(T t) { add(size, t); } /** * 獲取連結串列的第index(0-based)個位置的元素 * @param index * @return */ public T get(int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException("Get failed. Illegal index."); } Node cur = dummyHead.next; for (int i = 0; i < index; i++) { cur = cur.next; } return cur.t; } /** * 獲取連結串列的第一個元素 * @return */ public T getFirst() { return get(0); } /** * 獲取連結串列的最後一個元素 * @return */ public T getLast() { return get(size - 1); } /** * 修改連結串列中的第index(0-based)個位置的元素為t * @param index * @param t */ public void set(int index, T t) { if (index < 0 || index >= size) { throw new IllegalArgumentException("Get failed. Illegal index."); } Node cur = dummyHead.next; for (int i = 0; i < index; i++) { cur = cur.next; } cur.t = t; } /** * 查詢連結串列中是否有元素 * @param t * @return */ public boolean contains(T t) { Node cur = dummyHead.next; while (cur != null) { if (cur.t.equals(t)) { return true; } cur = cur.next; } return false; } /** * 刪除連結串列中的第index(0-based)個位置的元素 * @param index * @return t */ public T remove(int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException("Get failed. Illegal index."); } Node prev = dummyHead; for (int i = 0; i < index; i++) { prev = prev.next; } Node retNode = prev.next; prev.next = retNode.next; retNode.next = null; size --; return retNode.t; } /** * 刪除連結串列首元素 * @return */ public T removeFirst() { return remove(0); } /** * 刪除連結串列末尾元素 * @return */ public T removeLast() { return remove(size - 1); } @Override public String toString() { StringBuilder res = new StringBuilder(); Node cur = dummyHead.next; while(cur != null) { res.append(cur + "->"); cur = cur.next; } res.append("NULL"); return res.toString(); } public static void main(String[] args) { LinkedList<Integer> linkedList = new LinkedList<>(); for (int i = 0; i < 5; i++) { linkedList.addFirst(i); System.out.println(linkedList); } linkedList.add(2, 666); System.out.println(linkedList); linkedList.remove(2); System.out.println(linkedList); linkedList.removeFirst(); System.out.println(linkedList); linkedList.removeLast(); System.out.println(linkedList); } }