Java用循环链表写的约瑟夫环
来源:互联网 发布:费迪南德拳击 知乎 编辑:程序博客网 时间:2024/05/16 11:15
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);
}
}
}
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 0
- Java用循环链表写的约瑟夫环
- 循环列表的Java实现,解决约瑟夫环问题
- Java循环链表实现约瑟夫环
- java循环单链表实现约瑟夫环问题
- Java循环链表实现约瑟夫环
- Java循环链表实现约瑟夫环
- 约瑟夫环 java循环链表实现
- 用循环链表解决约瑟夫环的范例
- Java用循环链表解决约瑟夫环问题(循环报数)
- 约瑟夫环的循环链表实现
- 循环链表中约瑟夫环的问题
- (学习java)用java语言构造的循环链表解决约瑟夫问题
- 基于java的数据结构学习手记8--循环单链表及其应用约瑟夫环
- Java约瑟夫问题(丢手帕)的双向循环实现
- java单向循环链表实现约瑟夫环
- JAVA程序设计(13.1)---- 循环 数组 应用复习,约瑟夫环问题
- java循环链表实现约瑟夫环问题
- 约瑟夫环的JAVA实现
- ctrl左键无效
- SHOW PROCESSLIST ,mysql进程查询和定时脚本零时解决进程锁死问题
- iOS中使用textView进行图文混排的上传与显示
- IOS开发第二天-类别与扩展
- CDR怎么保存JPG格式
- Java用循环链表写的约瑟夫环
- 3.25日天梯赛大区赛lv1题解
- 3.0spring框架学习(三)junit单元测试
- centos7第一次安装jdk centos系统为Minimal版本也就是纯净版的
- 高德地图
- 学习reactJS笔记
- linux runtime pm机制的深入理解
- CenteOS6.5下Redis安装踩过的坑
- Linux高级IO