您的位置:首页 > 编程语言 > Java开发

java链表 约瑟夫问题

2014-03-28 16:59 459 查看
public class Link {

/**

* display(n,s,d); n个人,从第s个人开始,数到d出来

*/

public static void main(String[] args) {

int n = 7,d = 3, s =2;

new Link().display(n,s,d);

}

class linkNode{

int data;

linkNode next;

public linkNode(int k){

data = k;

next = null;

}

}

public void display(int n,int s, int d){

int i=1;

linkNode head,rail,q;

head = new linkNode(i);

head.next = head;

rail=head;

while(i<n){

i++;

q = new linkNode(i);

rail.next = q;

q.next = head;

rail = q;

}

//从s开始报数

int j=1;

linkNode p = head;

while(j<s){

p = p.next;

j++;

}//得到第s个节点

while(p != p.next){//还有1个时

j=1;

while(j < d-1){//得到第d个节点前一个节点,可删除操作

p = p.next;

j++;

}

System.out.print(p.next.data + " ");

p.next = p.next .next;//为了此操作可进行

p = p.next;

}

System.out.println(p.data);

}

}

2、、、、、、

public class lYSF {

/**

*

*/

public static void main(String[] args) {

int n = 5, s=2, d =3;

YSF1 ss = new YSF1(n);

ss.disply(s,d);

}

}

class linkNode{

int data;

linkNode next;

public linkNode(int k){

data = k;

next = null;

}

}

class YSF1{

linkNode head;

YSF1(int n){

int i = 1;

linkNode rear;

head = new linkNode(i);

rear = head;

head.next = head;

while(i<n){

i++;

linkNode p = new linkNode(i);

rear.next = p;

p.next = head;

rear = p;

}

}

public void disply(int s, int d){

int j = 0;

linkNode p = head;

while(j<s-1){

j++;

p = p.next;

}

while(p != p.next){

j=1;

while(j < d-1){

p = p.next;

j++;

}

delete(p);

p = p.next;

}

System.out.println(p.data);

}

private void delete(linkNode p) {

linkNode q = p.next;

System.out.println(q.data);

if(q == head){

head = q.next;

}

p.next = q.next;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: