数据结构复习(6)---循环链表

上一章:数据结构复习(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;
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_41367523/article/details/95648104