Java用循环链表写的约瑟夫环

package com;

import java.util.Scanner;

interface SeqList{//规范化实现接口类的操作
//初始化链表
ListNode initList();
//插入一个一个节点
ListNode insertNode(int val,ListNode head);
//删除指定节点
ListNode deleteNode(int val,ListNode head);
//遍历打印节点
void print(ListNode head);
//约瑟夫环的打印输出
void print(ListNode head,int k);
}
class ListNode{//构造一个节点类,类似c中的结构体,一定要注意将节点的next设置为空
int val;
ListNode next;
ListNode(int x) {
val = x; this.next=null; 
}
}
public  class  Test1 implements SeqList{


    public static void main(String[] args) {
    Test1 test=new Test1();
    ListNode head=test.initList();//初始化
    /*test.print(head);
    //head=test.insertNode(9, head);
    //test.print(head);
    head=test.deleteNode(1, head);
    //System.out.println(temp.val);
    test.print(head);*/
    test.print(head,3);
   
}


@Override
public  ListNode initList() {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
ListNode head=null;
if(in.hasNext()){
head=new ListNode(in.nextInt());
}
ListNode temp=head;
while(in.hasNext()){//利用ctrl+z结束,尾插法创建链表
temp.next=new ListNode(in.nextInt());
temp=temp.next;
}
temp.next=head;//如果想构造循环链表,可以直接将尾的next链接到头节点
return head;
}


@Override
public ListNode insertNode(int val, ListNode head) {
// TODO Auto-generated method stub
ListNode temp=null;
if(head==null){
head=new ListNode(val);
}else{
temp=head;
while(temp.next!=null){
temp=temp.next;
}
temp.next=new ListNode(val);

}
return head;//不返回头结点,链表也会修改
}


@Override
public ListNode deleteNode(int val, ListNode head) {
// TODO Auto-generated method stub
if(head==null){
System.out.println("delete error!");
return null;
}
ListNode temp=null;
if(head.val==val){//在头结点
temp=head;
head=null;
head=temp.next;
}else{
ListNode p=head;

ListNode pre=p;
p=p.next;
while(p!=null){
if(p.val==val){
temp=p;
pre.next=p.next;
}
pre=p;
p=p.next;
}
}
return head;
}


@Override
public void print(ListNode head) {
// TODO Auto-generated method stub
if(head==null) 
System.out.println("head is null");
else{
ListNode p=head;
while(p!=null){
if(p.next==null)
System.out.println(p.val);
else
System.out.print(p.val+"->");
    p=p.next;
    }
}
}


@Override
public void print(ListNode head, int k) {
// TODO Auto-generated method stub
ListNode p=head;
if(head==null){
System.out.println("List is null");
return;
}else{
System.out.println("出圈的顺序为:");
ListNode pre;
while(p!=p.next){
for(int i=2;i<k;i++)
p=p.next;
System.out.print(p.next.val+" ");
p.next=p.next.next;//删除该节点
p=p.next;
    }   
   System.out.println(p.val);
}
}


}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值