Java單鏈表的簡單操作
阿新 • • 發佈:2018-12-27
連結串列:連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個結點地址的指標域。(百度百科解釋)
1.定義一個節點類
//定義連結串列節點類 private class Node{ private Object data; //定義節點資料 private Node next; //定義指向的下一個節點 public Node(Object data){ this.data = data; } }
2.連結串列的基本操作
public class SingleLinkedList { private int size;//定義連結串列節點的個數 private Node head;//頭結點 public SingleLinkedList() { size = 0; head = null; } //定義連結串列節點類 private class Node{ private Object data; //定義節點資料 private Node next; //定義指向的下一個節點 public Node(Object data){ this.data = data; } } //新增連結串列的頭結點 public Object addHead(Object obj){ Node newNode = new Node(obj); if(size==0){ head = newNode; }else{ newNode.next = head; head = newNode; } size++; return obj; } //刪除頭結點 public Object deleteHead(){ Object obj = head.data; head = head.next; return obj; } //查詢指定的元素對應的節點 public Node find(Object obj){ int tempSize = size; Node node = head; while(tempSize>0){ if(obj.equals(node.data)){ return node; }else{ node = node.next; } tempSize--; } return null; } //刪除指定元素的對應的節點 public boolean deleteNode(Object obj){ if(size == 0){ return false; } Node firstNode = head; //當前節點 Node nextNode = head; //後一個節點 while(nextNode.data!=obj){ if(nextNode.next == null){ return false; }else{ firstNode = nextNode; nextNode = nextNode.next; } } //如果是頭結點的話 if(nextNode == head){ head = nextNode.next; size--; }else{ firstNode.next = nextNode.next; size--; } return true; } //判斷連結串列是否為空 public boolean isEmpty(){ if(size>0){ return false; }else{ return true; } } //列印連結串列 public void display(){ if(size>0){ Node node = head; int tempSize = size; if(tempSize==1){ System.out.print("["+node.data+"]"); return ; } while(tempSize>0){ if(node.equals(head)){ System.out.print("["+node.data+"->"); }else if(node.next==null){ System.out.print(node.data+"]"); }else{ System.out.print(node.data+"->"); } tempSize--; node = node.next; } System.out.println(); }else{ System.out.println("[]"); } } }
3.測試一下
//測試 @Test public void test(){ SingleLinkedList list = new SingleLinkedList(); list.addHead("A"); list.addHead("B"); list.addHead("C"); list.addHead("D"); list.addHead("E"); list.addHead("F"); list.display(); list.deleteNode("C"); list.display(); System.out.println("node:"+list.find("F").data); }
結果:
[F->E->D->C->B->A]
[F->E->D->B->A]
node:F