addbyAge()函数有什么问题,导致一个人以某种方式丢失?

问题描述 投票:0回答:1

输出:

 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;
    }
}
java sorting linked-list add
1个回答
0
投票

如下更改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
© www.soinside.com 2019 - 2024. All rights reserved.