天天看點

Java實作循環連結清單,實作連結清單的基本操作

用Java定義一個循環連結清單,實作連結清單的基本操作: 初始化、擷取頭結點、添加新元素、删除連結清單元素、擷取連結清單元素、查找連結清單元素、更新連結清單中某個元素、 判斷連結清單是否為空、求連結清單元素個數、輸對外連結表元素、清空連結清單。

邏輯思維圖

Java實作循環連結清單,實作連結清單的基本操作

先上結果圖

Java實作循環連結清單,實作連結清單的基本操作

操作結果為上圖

//初始化
		CircularLinkedList<Integer> clList = new CircularLinkedList<Integer>();
		//插入資料
		clList.insertList(1);
		clList.insertList(2);
		clList.insertList(3);
		clList.insertList(4);
		clList.insertList(5);
		clList.insertList(6);
		clList.print();
		//列印連結清單長度
		System.out.println("連結清單長度:" + clList.size());
		//修改第6個元素為888
		System.out.println("修改第6個元素為888," + clList.modify(888, 6));
		clList.print();
		//删除元素1的節點
		System.out.print("删除元素1的節點");
		clList.deletelist(1);
		clList.print();
		//查詢指定位置元素
		System.out.println("第1個元素值為:" + clList.getElement(1).data);
		System.out.println("第2個元素值為:" + clList.getElement(2).data);
		System.out.println("第3個元素值為:" + clList.getElement(3).data);
		//删除元素2的節點
		System.out.print("删除元素2的節點");
		clList.deletelist(2);
		clList.print();
		//判斷元素是否存在
		System.out.println("元素2是否存在?"+clList.isContain(2));
		System.out.println("元素3是否存在?"+clList.isContain(3));
		//清空連結清單
		System.out.println("清空連結清單");
		clList.clear();
		clList.print();
           

添加新元素

public void insertList(T obj) {
		Node<T> e = new Node<T>();
		e.data = obj;
		if (head.next == head)// 第一次插入元素
		{
			head.next = e;
			e.next = head;
		} else// 不是第一次插入元素
		{
			// temp引用在棧中,temp和head引用都指向堆中的initList()中new的Element對象
			Node<T> temp = head;
			while (temp.next != head)// 尋找最後一個元素
			{
				temp = temp.next;
			}
			temp.next = e;
			e.next = head;// 新插入的最後一個節點指向頭結點
		}
	}
           

删除連結清單中指定元素

public boolean deletelist(T obj) {
		Node<T> temp = head;
		if(!isContain(obj)){
			System.out.println("元素"+obj+"不存在");
			return false;
		}
		while (temp.next != head) {
			// 判斷temp目前指向的結點的下一個結點是否是要删除的結點
			if (temp.next.data.equals(obj)) {
				temp.next = temp.next.next;// 删除結點
			} else {
				temp = temp.next;// temp“指針”後移
			}
		}
		return true;
	}
           

擷取連結清單的第i個位置的元素

public Node<T> getElement(int i) {
		if (i <= 0 || i > size()) {
			System.out.println("擷取連結清單的位置有誤!傳回null");
			return null;
		} else {
			int count = 0;
			Node<T> element = new Node<T>();
			Node<T> temp = head;
			while (temp.next != head) {
				count++;
				if (count == i) {
					element.data = temp.next.data;
				}
				temp = temp.next;
			}
			return element;
		}
	}
           

查找連結清單元素

public boolean isContain(T obj) {
		Node<T> temp = head;
		while (temp.next != head) {
			if (temp.next.data.equals(obj)) {
				return true;
			}
			temp = temp.next;
		}
		return false;
	}
           

更新連結清單中指定位置的元素

public boolean modify(T obj, int pos) {
		if (isEmpty()) {
			System.out.println("連結清單為空");
			return false;
		} else {
			if (pos < 1 || pos > size()) {
				System.out.println("pos值不合法");
				return false;
			}
			int num = 1;
			Node<T> q = head.next;
			while (num < pos) {
				q = q.next;
				num++;
			}
			q.data = obj;
			return true;
		}
	}
           

判斷連結清單是否為空

public boolean isEmpty() {
		return size() == 0;
	}
           

求連結清單元素個數

public int size() {
		Node<T> temp = head;
		int size = 0;
		while (temp.next != head) {
			size++;
			temp = temp.next;
		}
		return size;
	}
           

輸對外連結表元素

public void print() {
		System.out.print("列印連結清單:");
		Node<T> temp = head;
		while (temp.next != head) {
			temp = temp.next;
			System.out.print(temp.data + " -> ");
		}
		System.out.println();
	}
           

清空連結清單

public void clear() {
		head.data = null;
		head.next = head;
	}
           

有空的動動小手支援一下作者!,給作者點贊加收藏,如果有問題請在底下留言!

群名稱:Java技術交流2群, QQ群号:717649447