import?java.io.*;
import?java.util.*;
class?SuitorNode
{
private?int?num=0; //?Suitor's?position?in?line
private?SuitorNode?next=null; //?Reference?to?next?suitor
/**
*?SuitorNode?constructor,?initializes?number
*/
public?SuitorNode(?int?number?)
{
num?=?number;
}
/*?Accessor?and?mutator?methods?*/
public?int?getNum(?)
{
return?num;
}
public?SuitorNode?getNext(?)
{
return?next;
}
public?void?setNext(?SuitorNode?nextNode?)
{
next?=?nextNode;
}
}
/**
*?Suitor?contains?the?main?code?that?creates?the?linked?list?of?suitors
*?and?eliminates?them?one?by?one.
*/
public?class?SuitorTest
{
/**
*?Main?method?constructs?and?manipulates?the?linked?list
*/
public?static?void?main(String[]?args)
{
//?Variable?declarations
int?numSuitors;
SuitorNode?current?=?null; //?Linked?list?of?suitors
SuitorNode?tail?=?null; //?Tracks?end?of?list?as?it?is?constructed
SuitorNode?prev?=?null; //?Tracks?previous?node?as?we?eliminate?suitors
Scanner?scan?=?new?Scanner(?System.in?);
System.out.println("Enter?the?number?of?suitors:");
numSuitors?=?scan.nextInt(?);
? if?(?numSuitors?>?0?)
? {
current?=?new?SuitorNode(?1?);
current.setNext(?current?); //?Make?into?a?circular?list
tail?=?current?;
for?(?int?i=1;?i?<numSuitors;?i++?)
{
//?Add?new?node?to?the?end?of?the?list
SuitorNode?temp?=?new?SuitorNode?(?i+1?);
temp.setNext(current.getNext(?)?);
current.setNext(?temp?);
tail?=?current?.?getNext(?);
}
?}
?if?(numSuitors?<=0)
?{
?System.out.println("Not?enough?suitors.");
?}
?else?if?(numSuitors?==?1)
?{
?System.out.println("You?would?stand?first?in?line.");
?}
?else
?{
?//?Eliminate?a?suitor?as?long?as?there?is?at?least?one
?while?(current.getNext()?!=?current)
?{
?//?Count?three?people?ahead,?or?go?two?people?down
?//?since?we?include?the?current?person?in?the?count
?for?(?int?i=0;?i<2;?i++?)
?{
?prev?=?current;
?current?=?current.getNext();
?}
?//?Eliminate?contestant?current
prev.setNext(?current.getNext(?));?//?Skip?over?this?node
?current?=?prev.getNext(?);
?}
?System.out.println("To?win?the?princess,?"?+
? "you?should?stand?in?position?"?+current.getNum(?)?);
?}
}
}