输出:
Anderson, 97
Anfinsen, 79
Banerjee, 59
Bridgman, 78
我想要的输出:
Anderson, 97
Bishop, 84
Anfinsen, 79
Bridgman, 78
Banerjee, 59
我的列表类,具有主要功能
package university.people;
import javax.tools.utilities.*;
public class PeopleList {
private Node start;
// Here is the issue: Person with the name Bishop does not get outputted
public void addByAge(Node newNode) {
if (start == null) {
start = newNode;
} else {
Node temp = newNode;
Node headTemp = start;
while (headTemp.getNext() != null) {
if (temp.getAge() > headTemp.getAge()) {
headTemp = temp;
break;
} else {
headTemp = headTemp.getNext();
}
}
headTemp.setNext(temp);
}
}
// Create a reference of my List class and add some dummy data sorted by age
public static void main(String[] args) {
PeopleList people = new PeopleList();
people.addByAge(new Node(97, "Anderson"));
people.addByAge(new Node(79, "Anfinsen"));
people.addByAge(new Node(59, "Banerjee"));
people.addByAge(new Node(84, "Bishop"));
people.addByAge(new Node(78, "Bridgman"));
people.printPeopleList();
}
// Output the list
private void printPeopleList() {
Node temp = start;
while (temp != null) {
System.out.println(temp.getLastName() + ", " + temp.getAge());
temp = temp.getNext();
}
}
}
这是List类中每个元素的Node类
package javax.tools.utilities;
public class Node {
private int number, age;
private String lastName;
private Node next, prev;
// Constructor
public Node(int a, String l) {
this.age = a;
this.lastName = l;
}
// Getter --- SETTER
public int getNumber() {
return number;
}
public Node getNext() {
return next;
}
public Node getPrev() {
return prev;
}
public void setNext(Node n) {
this.next = n;
}
public void setPrev(Node n) {
this.prev = n;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
如下更改addByAge
的定义:
public void addByAge(Node newNode) {
if (start == null) {
start = newNode;
} else {
Node headTemp = start;
Node temp = null;
while (headTemp.getNext() != null) {
if (newNode.getAge() > headTemp.getAge() && temp != null) {
temp.setNext(newNode);
newNode.setNext(headTemp);
break;
} else {
temp = headTemp;
headTemp = temp.getNext();
}
}
if (newNode.getAge() > headTemp.getAge()) {
if (temp != null) {
temp.setNext(newNode);
newNode.setNext(headTemp);
} else {
start = newNode;
newNode.setNext(headTemp);
}
} else {
headTemp.setNext(newNode);
}
}
}
此更改后的输出:
Anderson, 97
Bishop, 84
Anfinsen, 79
Bridgman, 78
Banerjee, 59
[更新]
根据OP的要求,一旦到达列表末尾,就以相反的顺序再次打印该列表,以下是更新的程序:
public class Main {
private Node start;
public void addByAge(Node newNode) {
if (start == null) {
start = newNode;
} else {
Node headTemp = start;
Node temp = null;
while (headTemp.getNext() != null) {
if (newNode.getAge() > headTemp.getAge() && temp != null) {
temp.setNext(newNode);
newNode.setPrev(temp);
newNode.setNext(headTemp);
headTemp.setPrev(newNode);
break;
} else {
temp = headTemp;
headTemp = temp.getNext();
}
}
if (newNode.getAge() > headTemp.getAge()) {
if (temp != null) {
temp.setNext(newNode);
newNode.setPrev(temp);
newNode.setNext(headTemp);
headTemp.setPrev(newNode);
} else {
start = newNode;
newNode.setNext(headTemp);
headTemp.setPrev(newNode);
}
} else {
headTemp.setNext(newNode);
newNode.setPrev(headTemp);
}
}
}
// Create a reference of my List class and add some dummy data sorted by age
public static void main(String[] args) {
Main people = new Main();
people.addByAge(new Node(97, "Anderson"));
people.addByAge(new Node(100, "Andy"));
people.addByAge(new Node(79, "Anfinsen"));
people.addByAge(new Node(59, "Banerjee"));
people.addByAge(new Node(84, "Bishop"));
people.addByAge(new Node(78, "Bridgman"));
people.printPeopleList();
}
// Output the list
private void printPeopleList() {
Node temp = start;
while (temp.getNext() != null) {
System.out.println(temp.getLastName() + ", " + temp.getAge());
temp = temp.getNext();
}
System.out.println(temp.getLastName() + ", " + temp.getAge());
while (temp != null) {
System.out.println(temp.getLastName() + ", " + temp.getAge());
temp = temp.getPrev();
}
}
}
输出:
Andy, 100
Anderson, 97
Bishop, 84
Anfinsen, 79
Bridgman, 78
Banerjee, 59
Banerjee, 59
Bridgman, 78
Anfinsen, 79
Bishop, 84
Anderson, 97
Andy, 100