链表添加方法未按预期工作
Linked list add method not working as expected
所以我正在尝试解决一个涉及将对象添加到链表的问题。我从早上开始就一直在处理这个问题,到目前为止我还没有得到确切的输出。
我的程序基本上是根据 severity
和 arrival
这两个标准将患者添加到链表中。
我想使用 severity
从最高到最低添加患者。如果它们确实具有相同的严重性,那么我想根据到达的升序存储它们。例如,
Patient 1, arrival 2, severity 3
Patient 2, arrival 3, severity 3
或者如果他们有不同的严重性,那么像这样:
Patient 1, arrival 2, severity 2
Patient 2, arrival 1, severity 1
总之severity
必须按降序排列,如果严重程度相同则按arrival
升序存储。
到目前为止我试过的是这个,这个方法在patient
class:
public boolean compareSeverity(Patient other) {
boolean result = false;
if(other.severity > severity) {
result = true;
} else if(other.severity == severity) {
if(other.arrival > arrival) {
result = true;
} else {
result = false;
}
} else {
result = false;
}
return result;
}
这就是我为 linked list
class.
编写 add
方法的方式
public void add(String name, int severity) {
lastArrival++;
Patient patient = new Patient(name, lastArrival, severity);
PatientNode current, previous;
current = head;
previous = null;
if(head == null) {
head = current = new PatientNode(patient, head);
size++;
} else {
while(current!=null) {
//previous = current;
if(current.data.compareSeverity(patient)) {
PatientNode n = new PatientNode(patient,current);
size++;
if(previous!=null) {
previous.next = n;
}
return;
}
previous = current;
current = current.next;
}
}
}
然而,当我尝试 运行 我的程序时,它只显示一名患者。
我从早上开始就一直在修改我的方法,这就是我到目前为止所得到的。也许我需要一双新眼睛,因为现在我对这个问题无处可去。任何帮助将不胜感激。
The output that i am getting
编辑 2
列表正在完全打印出来,但它没有执行如果严重程度相同则按升序存储患者的标准。
New Output
你设置了从previous到n的指针,但是你从来没有设置从n到next的指针。您只是在链表中创建所需的两个链接之一。
if(current.data.compareSeverity(patient)) {
PatientNode nextHolder = current.next;
PatientNode n = new PatientNode(patient,current);
size++;
n.next = current; //this line forgotten??
if(previous==null) {
head = n;
}
else {
previous.next = n;
}
return;
}
previous = current;
current = current.next;
你还需要处理新专利在列表中排在第一位的情况,需要更新head变量。
所以我正在尝试解决一个涉及将对象添加到链表的问题。我从早上开始就一直在处理这个问题,到目前为止我还没有得到确切的输出。
我的程序基本上是根据 severity
和 arrival
这两个标准将患者添加到链表中。
我想使用 severity
从最高到最低添加患者。如果它们确实具有相同的严重性,那么我想根据到达的升序存储它们。例如,
Patient 1, arrival 2, severity 3
Patient 2, arrival 3, severity 3
或者如果他们有不同的严重性,那么像这样:
Patient 1, arrival 2, severity 2
Patient 2, arrival 1, severity 1
总之severity
必须按降序排列,如果严重程度相同则按arrival
升序存储。
到目前为止我试过的是这个,这个方法在patient
class:
public boolean compareSeverity(Patient other) {
boolean result = false;
if(other.severity > severity) {
result = true;
} else if(other.severity == severity) {
if(other.arrival > arrival) {
result = true;
} else {
result = false;
}
} else {
result = false;
}
return result;
}
这就是我为 linked list
class.
add
方法的方式
public void add(String name, int severity) {
lastArrival++;
Patient patient = new Patient(name, lastArrival, severity);
PatientNode current, previous;
current = head;
previous = null;
if(head == null) {
head = current = new PatientNode(patient, head);
size++;
} else {
while(current!=null) {
//previous = current;
if(current.data.compareSeverity(patient)) {
PatientNode n = new PatientNode(patient,current);
size++;
if(previous!=null) {
previous.next = n;
}
return;
}
previous = current;
current = current.next;
}
}
}
然而,当我尝试 运行 我的程序时,它只显示一名患者。
我从早上开始就一直在修改我的方法,这就是我到目前为止所得到的。也许我需要一双新眼睛,因为现在我对这个问题无处可去。任何帮助将不胜感激。 The output that i am getting
编辑 2
列表正在完全打印出来,但它没有执行如果严重程度相同则按升序存储患者的标准。
New Output
你设置了从previous到n的指针,但是你从来没有设置从n到next的指针。您只是在链表中创建所需的两个链接之一。
if(current.data.compareSeverity(patient)) {
PatientNode nextHolder = current.next;
PatientNode n = new PatientNode(patient,current);
size++;
n.next = current; //this line forgotten??
if(previous==null) {
head = n;
}
else {
previous.next = n;
}
return;
}
previous = current;
current = current.next;
你还需要处理新专利在列表中排在第一位的情况,需要更新head变量。