JAVA基礎(63)---單向連結串列
阿新 • • 發佈:2018-11-20
鏈式儲存結構
結點在儲存器中的位置是任意的,即邏輯上相鄰的資料元素在物理上不一定相鄰。
單鏈表的儲存映像
單向連結串列的每個資料項儲存的都是 資料 + 下一個資料地址 ;雙向連結串列儲存的是 上一個資料地址 + 資料 + 下一個資料地址
單向連結串列的實現
public class SingleLinkedList { /* * 結點類 */ private class Node{ private Object data; private Node next; public Node(Object data,Node next) { this.data = data; this.next = next; } public Node(Object data) { this.data = data; this.next = null; } } /* * 頭結點 */ private Node head; private int size;//連結串列中有資料的節點的個數 /* * 建立一個連結串列物件 只有頭結點而且是一個空結點 */ public SingleLinkedList() { head = new Node(null); } public void add(Object obj) { Node n = new Node(obj); if(size == 0 ) { head.next = n; }else { Node temp = head.next; head.next = n; n.next = temp; } size++; } /* * 獲取連結串列的元素 */ public Object getValue(int index) { if(index <= size) { Node temp = head; int i = 0 ; while(temp != null) { if(i == index ) { return temp.data; } i++; temp = temp.next; } return null; } return null; } public void deleteNode(Object obj) { Node p = head; Node q = head.next; while(q != null){ if(q.data.equals(obj)){ p.next = q.next; size--; }else{ p = q; q = q.next; } } } /* * 獲取連結串列的長度 */ public int getSize() { return size; } public void print() { Node temp = head.next; while(temp!=null) { System.out.print(temp.data); temp = temp.next; } System.out.println(); } }
public class Test { public static void main(String[] args) { SingleLinkedList sl = new SingleLinkedList(); sl.add("aa"); sl.add("bb"); sl.add("cc"); sl.add("dd"); sl.print(); System.out.println(sl.getSize()); Object obj = sl.getValue(3); System.out.println(obj); sl.deleteNode("dd"); System.out.println(sl.getSize()); sl.print(); } }
單向連結串列的刪除圖示