/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
class LinkedPatients {
private PatientNode head = null ;
private int size = 0 ;
private int lastArrival = 0 ;
public PatientNode getHead( ) {
return head;
}
public int getSize( ) {
return size;
}
public int getLastArrival( ) {
return lastArrival;
}
public void add
( String name,
int severity
) { lastArrival++;
Patient patient = new Patient( name, lastArrival, severity) ;
if ( head == null ) {
head = new PatientNode( patient, head) ;
size++;
} else {
PatientNode current, previous;
current = head;
previous = null ;
while ( current!= null ) {
if ( current.data .compareSeverity ( patient) ) {
PatientNode n = new PatientNode( patient,current) ;
size++;
//n.next = current; // overkill
if ( previous== null ) {
head = n;
} else {
previous.next = n;
}
return ;
}
previous = current;
current = current.next ;
}
if ( current == null ) {
previous.next = new PatientNode( patient, null ) ;
size++;
}
}
}
}
class PatientNode {
public Patient data;
public PatientNode next;
public PatientNode( Patient data, PatientNode next) {
this .data = data;
this .next = next;
}
}
class Patient{
private int severity;
private int arrival;
public Patient
( String name,
int arrival,
int severity
) { this .name = name;
this .severity = severity;
this .arrival = arrival;
}
public int getSeverity( ) {
return severity;
}
public int getArrival( ) {
return arrival;
}
public boolean compareSeverity( Patient other) {
boolean result = false ;
if ( ( other.severity > severity) || ( other.severity == severity && other.arrival < arrival) ) {
result = true ;
}
return result;
}
@Override
return "Patient " + this .name + " arrived at " + this .arrival + " with severity " + this .severity ;
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
caseOne( ) ;
caseTwo( ) ;
caseThree( ) ;
}
private static void caseOne( ) {
LinkedPatients hospi = new LinkedPatients( ) ;
hospi.add ( "Ihor" , 1 ) ;
hospi.add ( "Casper" , 3 ) ;
hospi.add ( "Clayton" , 2 ) ;
hospi.add ( "Zelma" , 1 ) ;
printHospi( hospi) ;
}
private static void caseTwo( ) {
LinkedPatients hospi = new LinkedPatients( ) ;
hospi.add ( "Zelma" , 1 ) ;
hospi.add ( "Clayton" , 2 ) ;
hospi.add ( "Casper" , 3 ) ;
hospi.add ( "Ihor" , 1 ) ;
hospi.add ( "Edwina" , 3 ) ;
printHospi( hospi) ;
}
private static void caseThree( ) {
LinkedPatients hospi = new LinkedPatients( ) ;
hospi.add ( "Zelma" , 1 ) ;
hospi.add ( "Clayton" , 2 ) ;
hospi.add ( "Ihor" , 1 ) ;
hospi.add ( "Edwina" , 3 ) ;
printHospi( hospi) ;
}
public static void printHospi( LinkedPatients hospi) {
System .
out .
println ( "Size = " + hospi.
getSize ( ) ) ; System .
out .
println ( "LastArrival = " + hospi.
getLastArrival ( ) ) ; PatientNode current = hospi.getHead ( ) ;
while ( current != null ) {
System .
out .
println ( current.
data ) ; current = current.next ;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBMaW5rZWRQYXRpZW50cyB7Cglwcml2YXRlIFBhdGllbnROb2RlIGhlYWQgPSBudWxsOwoJcHJpdmF0ZSBpbnQgc2l6ZSA9IDA7Cglwcml2YXRlIGludCBsYXN0QXJyaXZhbCA9IDA7CgkKCXB1YmxpYyBQYXRpZW50Tm9kZSBnZXRIZWFkKCl7CgkJcmV0dXJuIGhlYWQ7Cgl9CgkKCXB1YmxpYyBpbnQgZ2V0U2l6ZSgpewoJCXJldHVybiBzaXplOwoJfQoJCglwdWJsaWMgaW50IGdldExhc3RBcnJpdmFsKCl7CgkJcmV0dXJuIGxhc3RBcnJpdmFsOwoJfQoJCglwdWJsaWMgdm9pZCBhZGQoU3RyaW5nIG5hbWUsIGludCBzZXZlcml0eSkgewoJCWxhc3RBcnJpdmFsKys7CgkJUGF0aWVudCBwYXRpZW50ID0gbmV3IFBhdGllbnQobmFtZSwgbGFzdEFycml2YWwsIHNldmVyaXR5KTsKCQlpZihoZWFkID09IG51bGwpIHsKCQkJaGVhZCA9IG5ldyBQYXRpZW50Tm9kZShwYXRpZW50LCBoZWFkKTsKCQkJc2l6ZSsrOwoJCX0gZWxzZSB7CgkJCVBhdGllbnROb2RlIGN1cnJlbnQsIHByZXZpb3VzOwoJCQljdXJyZW50ID0gaGVhZDsKCQkJcHJldmlvdXMgPSBudWxsOwoJCQl3aGlsZShjdXJyZW50IT1udWxsKSB7CgkJCQlpZihjdXJyZW50LmRhdGEuY29tcGFyZVNldmVyaXR5KHBhdGllbnQpKSB7CgkJCQkJUGF0aWVudE5vZGUgbiA9IG5ldyBQYXRpZW50Tm9kZShwYXRpZW50LGN1cnJlbnQpOwoJCQkJCXNpemUrKzsKCQkJCQkvL24ubmV4dCA9IGN1cnJlbnQ7IC8vIG92ZXJraWxsCgkJCQkJaWYocHJldmlvdXM9PW51bGwpIHsKCQkJCQkJaGVhZCA9IG47CgkJCQkJfSBlbHNlIHsKCQkJCQkJcHJldmlvdXMubmV4dCA9IG47CgkJCQkJfQoJCQkJCXJldHVybjsKCQkJCX0KCQkJCXByZXZpb3VzID0gY3VycmVudDsKCQkJCWN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CgkJCX0KCQkJaWYoY3VycmVudCA9PSBudWxsKXsKCQkJCXByZXZpb3VzLm5leHQgPSBuZXcgUGF0aWVudE5vZGUocGF0aWVudCwgbnVsbCk7CgkJCQlzaXplKys7CgkJCX0KCQl9Cgl9Cn0KCmNsYXNzIFBhdGllbnROb2RlIHsKCXB1YmxpYyBQYXRpZW50IGRhdGE7CglwdWJsaWMgUGF0aWVudE5vZGUgbmV4dDsKCQoJcHVibGljIFBhdGllbnROb2RlKFBhdGllbnQgZGF0YSwgUGF0aWVudE5vZGUgbmV4dCkgewoJCXRoaXMuZGF0YSA9IGRhdGE7CgkJdGhpcy5uZXh0ID0gbmV4dDsKCX0KfQoKY2xhc3MgUGF0aWVudHsKCXByaXZhdGUgU3RyaW5nIG5hbWU7Cglwcml2YXRlIGludCBzZXZlcml0eTsKCXByaXZhdGUgaW50IGFycml2YWw7CgkKCXB1YmxpYyBQYXRpZW50KFN0cmluZyBuYW1lLCBpbnQgYXJyaXZhbCwgaW50IHNldmVyaXR5KXsKCQl0aGlzLm5hbWUgPSBuYW1lOwoJCXRoaXMuc2V2ZXJpdHkgPSBzZXZlcml0eTsKCQl0aGlzLmFycml2YWwgPSBhcnJpdmFsOwoJfQoJCglwdWJsaWMgaW50IGdldFNldmVyaXR5KCkgewoJCXJldHVybiBzZXZlcml0eTsKCX0KCQoJcHVibGljIGludCBnZXRBcnJpdmFsKCkgewoJCXJldHVybiBhcnJpdmFsOwoJfQoJCglwdWJsaWMgYm9vbGVhbiBjb21wYXJlU2V2ZXJpdHkoUGF0aWVudCBvdGhlcikgewoJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CgkJaWYoKG90aGVyLnNldmVyaXR5ID4gc2V2ZXJpdHkpIHx8IChvdGhlci5zZXZlcml0eSA9PSBzZXZlcml0eSAmJiBvdGhlci5hcnJpdmFsIDwgYXJyaXZhbCkpIHsKCQkJcmVzdWx0ID0gdHJ1ZTsKCQl9CgkJcmV0dXJuIHJlc3VsdDsKCX0KCQoJQE92ZXJyaWRlCglwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCl7CgkJcmV0dXJuICJQYXRpZW50ICIgKyB0aGlzLm5hbWUgKyAiIGFycml2ZWQgYXQgIiArIHRoaXMuYXJyaXZhbCArICIgd2l0aCBzZXZlcml0eSAiICsgdGhpcy5zZXZlcml0eTsKCX0KfQoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQljYXNlT25lKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCk7CgkJY2FzZVR3bygpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJCWNhc2VUaHJlZSgpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJfQoJCglwcml2YXRlIHN0YXRpYyB2b2lkIGNhc2VPbmUoKXsKCQlMaW5rZWRQYXRpZW50cyBob3NwaSA9IG5ldyBMaW5rZWRQYXRpZW50cygpOwoJCWhvc3BpLmFkZCgiSWhvciIsIDEpOwoJCWhvc3BpLmFkZCgiQ2FzcGVyIiwgMyk7CgkJaG9zcGkuYWRkKCJDbGF5dG9uIiwgMik7CgkJaG9zcGkuYWRkKCJaZWxtYSIsIDEpOwoJCXByaW50SG9zcGkoaG9zcGkpOwoJfQoJCglwcml2YXRlIHN0YXRpYyB2b2lkIGNhc2VUd28oKXsKCQlMaW5rZWRQYXRpZW50cyBob3NwaSA9IG5ldyBMaW5rZWRQYXRpZW50cygpOwoJCWhvc3BpLmFkZCgiWmVsbWEiLCAxKTsKCQlob3NwaS5hZGQoIkNsYXl0b24iLCAyKTsKCQlob3NwaS5hZGQoIkNhc3BlciIsIDMpOwoJCWhvc3BpLmFkZCgiSWhvciIsIDEpOwoJCWhvc3BpLmFkZCgiRWR3aW5hIiwgMyk7CgkJcHJpbnRIb3NwaShob3NwaSk7Cgl9CgkKCXByaXZhdGUgc3RhdGljIHZvaWQgY2FzZVRocmVlKCl7CgkJTGlua2VkUGF0aWVudHMgaG9zcGkgPSBuZXcgTGlua2VkUGF0aWVudHMoKTsKCQlob3NwaS5hZGQoIlplbG1hIiwgMSk7CgkJaG9zcGkuYWRkKCJDbGF5dG9uIiwgMik7CgkJaG9zcGkuYWRkKCJJaG9yIiwgMSk7CgkJaG9zcGkuYWRkKCJFZHdpbmEiLCAzKTsKCQlwcmludEhvc3BpKGhvc3BpKTsKCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIHByaW50SG9zcGkoTGlua2VkUGF0aWVudHMgaG9zcGkpewoJCVN5c3RlbS5vdXQucHJpbnRsbigiU2l6ZSA9ICIgKyBob3NwaS5nZXRTaXplKCkpOwoJCVN5c3RlbS5vdXQucHJpbnRsbigiTGFzdEFycml2YWwgPSAiICsgaG9zcGkuZ2V0TGFzdEFycml2YWwoKSk7CgkJUGF0aWVudE5vZGUgY3VycmVudCA9IGhvc3BpLmdldEhlYWQoKTsKCQl3aGlsZShjdXJyZW50ICE9IG51bGwpewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudC5kYXRhKTsKCQkJY3VycmVudCA9IGN1cnJlbnQubmV4dDsKCQl9Cgl9Cn0=