链接列表添加方法无法按预期工作

时间:2016-11-25 23:14:27

标签: java pointers linked-list nodes singly-linked-list

所以我试图解决一个涉及将对象添加到链表的问题。我从早上起就遇到过这个问题,到目前为止我还没有得到确切的输出。

我的计划基本上是根据两个标准severityarrival将患者添加到链接列表中。 我想使用severity将患者从最高到最低添加。如果它们具有相同的严重性,那么我想根据到达按升序存储它们。例如,

  

患者1,到达2,严重程度3

     

患者2,到达3,严重程度3

或者如果他们有不同的严重性,那么就像这样:

  

患者1,到达2,严重程度2

     

患者2,到达1,严重程度1

简而言之severity必须按降序排列,如果严重程度相同,则根据arrival按升序存储它们。

到目前为止我所尝试的是,此方法位于patient类:

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;
 }

这就是我为add类编写linked list方法的方式。

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

1 个答案:

答案 0 :(得分:0)

您可以将指针从前一个设置为n,但是您从不将指针从n设置为下一个。您只需在链接列表中创建所需的两个链接之一。

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;

您还需要处理新专利在列表中的第一个案例,并且需要更新头部变量。