1. 程式人生 > >java資料結構之迴圈單鏈表

java資料結構之迴圈單鏈表

直接上程式碼舉例說明:

public class CircularLinkedList {
	//java中迴圈單鏈表
	private class Node {//建立一個內部節點類
		private Node next = null;
		private Object value = null;

		public Node() {

		}

		public Node(Object value) {
			this.value = value;
		}
	}

	private Node head = null;//新建一個null的頭結點

	public CircularLinkedList() {//初始化頭結點資訊
		head = new Node(null);
		head.next = head;
	}

	public void insertNode(Object insertValue) {//在尾部新增節點
		Node node = new Node(insertValue);
		if (head.next == head) {
			head.next = node;
			node.next = head;
		} else {
			Node temp = head;
			while (temp.next != head) {
				temp = temp.next;
			}
			temp.next = node;
			node.next = head;
		}
	}

	public void deleteNode(Object deleteValue) {//刪除值為deleteValue的節點
		Node temp = head;
		while (temp.next != head) {
			if (temp.next.value.equals(deleteValue)) {
				temp.next = temp.next.next;
			} else {
				temp = temp.next;
			}
		}
	}

	public Object getIndexValue(int index) {//查詢位置為index的節點值
		if (index < 0 || index >= getSize()) {
			return null;
		} else {
			Node node = new Node();
			int count = 0;
			Node temp = head;
			while (temp.next != head) {
				if (count == index) {
					node.value = temp.next.value;
					break;
				} 
				temp = temp.next;

			}
			return node.value;
		}
	}

	public int getValue(Object value) {//查詢值為value的節點
		int count = 0;
		Node temp = head;
		while (temp.next != head) {
			if (temp.next.value.equals(value)) {
				return count;
			}
			count++;
			temp = temp.next;
		}
		return -1;
	}

	public int getSize() {//獲取迴圈單鏈表的長度
		Node temp = head;
		int size = 0;
		while (temp.next != head) {
			size++;
			temp = temp.next;
		}
		return size;
	}

	public boolean isContain(Object value) {//查詢是否包含值為value的節點
		Node temp = head;
		while (temp.next != head) {
			if (temp.next.value.equals(value)) {
				return true;
			}
			temp = temp.next;
		}
		return false;
	}

	public void disPlay() {//列印所有節點資料
		Node temp = head;
		while (temp.next != head) {
			System.out.print(temp.next.value + "\t");
			temp = temp.next;
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		CircularLinkedList c=new CircularLinkedList();
		c.insertNode(10);
		c.insertNode(21);
		c.insertNode(12);
		c.insertNode(13);
		c.insertNode(40);
		c.disPlay();
//		System.out.println(c.getSize());
//		System.out.println(c.getIndexValue(-1));
//		System.out.println(c.getValue(40));
//		c.deleteNode(10);
//		c.disPlay();
//		c.deleteNode(40);
//		c.disPlay();
//		c.deleteNode(12);
//		c.disPlay();
		System.out.println(c.isContain(21));
	}
}
如果有什麼不清楚或者有啥疑問意見可以加我QQ/微信  208017534  / qiang220316,歡迎一起交流一起進步。