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


版权声明:本文为qq_41596860原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。