java 循环单链表_java实现循环单链表

java中只能用类实现数据结构的功能

class cnode{//循环单链表

private Object data;//定义数据域

private cnode nextcnode;

private cnode head=null;

public Object getData() {

return data;

}

public void setData(Object data) {

this.data = data;

}

public cnode getNextcnode() {

return nextcnode;

}

public void setNextcnode(cnode nextcnode) {

this.nextcnode = nextcnode;

}

public void initcyclelist(){//循环链表初始化

head = new cnode();

//head.setData(data);

head.setNextcnode(head);

}

public void insert(Object data){//插入结点

//新建一个结点

cnode node=new cnode();

//结点中放入数据

node.setData(data);

//指针

if(head==head.getNextcnode()){

//只有头结点

head.setNextcnode(node);

node.setNextcnode(head);

}

else{

//不止一个结点

//创建临时结点(作用相当于指针,指向头结点)

cnode c=head;

//遍历循环链表,找到最后一个结点,再插入

while(head!=c.getNextcnode()){

c=c.getNextcnode();

}

//找到最后一个结点

//c结点的下一个结点设置为node

c.setNextcnode(node);

//node的下一个结点设置为头结点

node.setNextcnode(head);

}

}

public void print(){//输出循环链表的值

cnode c= head;

while(head!= c.getNextcnode()){

System.out.println(c.getData());

c=c.getNextcnode();

}

//循环退出后,还有一个结点的值没有输出

System.out.println(c.getData());

}

}

public class Testcnode {

public static void main(String[] args) {

cnode testcnode= new cnode();

testcnode.initcyclelist();

testcnode.insert(2);

testcnode.insert(3);

testcnode.insert(2);

testcnode.insert(4);

testcnode.print();

}

}

运行结果:

null

2

3

2

4

其中null是头结点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解您的要求。关于您的问题,Java可以实现循环单链表和约瑟夫环。循环单链表是一种特殊的单向链表,它的尾节点指向头节点,形成一个环。它的节点包含数据和指向下一个节点的指针。约瑟夫环是一个数学问题,也可以用链表来实现。算法如下: 1. 构造循环单链表并初始化节点数,设为 n。 2. 设定一个指针,指向头节点。 3. 从头节点开始遍历,每 m 个节点删除一个节点,直到链表只剩一个节点。 4. 输出最后剩下的节点。 Java代码实现如下: //定义节点类 class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; this.next = null; } } //循环单链表类 class CircularLinkedList { private ListNode head; //头节点 private ListNode tail; //尾节点 private int size; //节点数 public CircularLinkedList() { this.head = null; this.tail = null; this.size = 0; } //添加节点 public void addNode(int val) { ListNode node = new ListNode(val); if (head == null) { head = node; tail = node; tail.next = head; } else { tail.next = node; tail = node; tail.next = head; } size++; } //约瑟夫环 public int josephus(int m) { if (size == 0) return -1; //链表为空 ListNode cur = head; while (size > 1) { for (int i = 1; i < m - 1; ++i) { cur = cur.next; } cur.next = cur.next.next; //删除第 m 个节点 size--; cur = cur.next; //指向下一个节点 } return cur.val; } } //测试代码 public class Main { public static void main(String[] args) { CircularLinkedList cll = new CircularLinkedList(); for (int i = 1; i <= 10; ++i) { cll.addNode(i); } System.out.println(cll.josephus(3)); //输出最后剩下的节点 } } 以上就是Java实现循环单链表和约瑟夫环的代码。希望能够帮到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值