1到20的数围成一个圈,隔两个取出一个,直到所有的数都被取出为止,求取出的数的顺序:
package org.joseff.test;
public class Link {
private int value;
private Link next;
private Link previous;
public Link getPrevious() {
return previous;
}
public void setPrevious(Link previous) {
this.previous = previous;
}
public Link(int value){
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Link getNext() {
return next;
}
public void setNext(Link next) {
this.next = next;
}
public Link remove(){
System.out.println(this.getValue());
Link p = this.getPrevious();
Link n = this.getNext();
p.setNext(n);
n.setPrevious(p);
return n;
}
}
package org.joseff.test;
public class Test {
public static void main(String[] args) {
//initialize the link nodes.
Link t1 = new Link(1);
Link first = t1;
for(int i = 2 ; i <= 20 ; i++ ){
Link link = new Link(i);
t1.setNext(link);
link.setPrevious(t1);
t1 = link;
}
t1.setNext(first);
first.setPrevious(t1);
print(first);
}
public static void print(Link link){
//left the last node
if(link.getNext() == link){
System.out.println(link.getValue() + " ");
return;
}
Link tmp = link;
for(int i = 1 ; i < 3 ; i++ ){
tmp = tmp.getNext();
}
Link n = tmp.remove();
print(n);
}
}
结果:3 、6 、9 、12 、15 、18 、1 、5 、10 、14 、19 、4 、11 、17 、7 、16
、8 、2 、13 、20