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

该博客聚焦数据结构中的循环链表。循环链表是将单链表终端节点的next指针域从null指向头节点形成环。它与单链表代码有区别,因头尾相连无明显尾端,部分方法可能陷入死循环,可通过判断工作指针是否等于某指针域来判断是否遍历完。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值