用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版权协议,转载请附上原文出处链接和本声明。