單鏈表的操作API
阿新 • • 發佈:2022-04-10
/** * 1.1 根據值查詢返回節點 findByValue * 1.2 根據角標查詢返回指定的角標的值的節點 findByIndex * 2.1 連結串列頭部插入 insertToHead * 2.2 連結串列尾部插入 insertTail * 3.1 在指定節點的之前插入 insertBefore * 3.2 在指定節點的之後插入 insertAfter * 4.1 根據對應的節點上的值刪除節點 deleteByNode * 4.2 根據對應的節點刪除節點 deleteByValue */ public class SinglyLinkedList { private Node head = null; public static class Node{ public int data; public Node next; public Node() { } public Node(int data, Node node) { this.data = data; this.next = node; } public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getNode() { return next; } public void setNode(Node node) { this.next = node; } } /** * 根據值查詢返回節點 * @param data * @return */ public Node findByValue(int data){ Node p = head; while (p!=null && p.data != data){ p = p.next; } return p; } /** * 根據角標查詢返回指定的角標的值的節點 * @param raduis * @return */ public Node findByIndex(int raduis){ Node p = head; int pos = 0; while (p!=null && pos != raduis){ p = p.next; pos++; } return p; } /** * 插入新的節點資料 * @param data */ public void insertToHead(int data){ Node newNode = new Node(data,null); insertToHead(newNode); } /** * 新節點 * @param newNode */ public void insertToHead(Node newNode){ if(head == null){ head = newNode; }else { newNode.next = head; head = newNode; } } /** * 尾部插入 * @param data */ public void insertTail(int data){ Node newNode = new Node(data,null); insertTail(newNode); } public void insertTail(Node newNode){ if(head == null){ head = newNode; }else { Node p = head; while (p != null){ p = p.next; } p.next =newNode; } } /** * 在指定的節點之前插入節點資料 * @param node 指定的節點 * @param newNode 要插入的新的資料 */ public void insertBefore(Node node,Node newNode){ if(node == null ){ return; } if(head == null){ insertToHead(newNode); } Node p = head; while (p!= null && p.next!= node){ p = p.next; } if(p == null){ return; } newNode.next = node; p.next = newNode; } /** * 在指定的節點之後插入資料 * @param node 指定的節點 * @param newNode 要插入資料 */ public void insertAfter(Node node,Node newNode){ if(node == null){ return; } if(head == null){ insertToHead(newNode); } newNode.next = node.next; node.next = newNode; } /** * 刪除指定的節點 * @param node 指定的節點資料 */ public void deleteByNode(Node node){ if(head == null || node == null ){ return; } if(node == head){ head = head.next; } Node p = head; while (p!= null && p.next != node){ p = p.next; } if(p == null){ return; } p = p.next.next; node.next = null; } /** * 根據指定的值刪除對應的連結串列節點 * @param value 對應的值 */ public void deleteByValue(int value){ if(head == null){ return; } Node p = head; Node prev = null; while (p!=null && p.data != value){ prev = p; p = p.next; } if(p == null){ return; } if(prev == null){ head = head.next; }else { prev.next = p.next; p.next = null; } } }