上一章:数据结构复习(5)—单链表
循环链表: 其实就是将 单链表 终端节点的(next)指针域,由单链表的 null 变为指向头节点,从而形成一个环。就变成了循环链表
与单链表 有 区别的代码:
单链表: Node next = null ; 下一个指针域为空
循环链表: LoopNode next = this; 指向自身
头尾相连使得循环链表没有明显的尾端,可能会使一些方法进入死循环,一般判断用作循环变量的工作指针是否等于某一个指针域(next)即可判断是否遍历了整个循环链表
之前单链表的时候遍历都用了 while(true) ,直接用在循环链表肯定是死循环了
去掉查找所有
去掉判断长度
去掉判断最后一个节点
package cjy.datastructure;
/**
* 节点 Title: Node.java 循环链表
*
* @author CJY》10258
* @date 2019年7月12日
*/
public class LoopNode {
/**
* 节点对应的值(数值域)
*/
int data;
/**
* 下一个节点的位置(节点域) 默认指向自己
*/
LoopNode next = this;
/**
* 构建新节点
*
* @param data
* 节点的值
*/
public LoopNode(int data) {
this.data = data;
}
/**
* 转到下一个节点位置
*
* @return
*/
public LoopNode next() {
return this.next;
}
/**
* 获取当前节点的值
*
* @return
*/
public int getData() {
return this.data;
}
/**
* 在当前节点后面插入新节点
*
* @param newNode
*/
public void after(LoopNode newNode) {
LoopNode node = next;
this.next = newNode;
newNode.next = node;
}
/**
* 删除当前节点的下一个节点
*/
public void removeNode() {
if (this.next == null) {
throw new RuntimeException("无下一个节点");
}
LoopNode node = next.next;
this.next = node;
}
}