无法在我的链表中添加节点(java)

时间:2015-02-16 21:01:01

标签: java linked-list nodes

我现在一直在研究我的添加方法几个小时,似乎遇到了障碍。我的方法应该搜索列表中的每个节点以查看是否存在匹配的员工编号,如果没有,则按员工编号的顺序添加对象。

不幸的是,我似乎甚至无法在列表的开头或结尾添加节点。我想我理解逻辑。我必须搜索我的列表以找到我想要节点的位置,然后我要做的就是让新节点的链接点成为已存在的节点。我认为我要么没有正确创建节点,要么没有正确链接它们。每次我尝试测试我的代码时,我的列表中只会出现一个节点。

    import java.util.*;

public class HumanResources
{

    private EmployeeNode first;
    employee data = new employee();

    private class EmployeeNode
    {

        //data members of employeenode
        private EmployeeNode link;
        employee data = new employee();


        private EmployeeNode()
        {
            data = null;
            link = null;
        }

        private EmployeeNode (employee emp)
        {
            data = emp;
            link = null;
        }


    }


    public EmployeeNode search (employee search)
    {
        EmployeeNode current = first;

        if (first == null)
        { return null;}

        while((present != null) && (present.data != search))
        {
            present = present.link;

        }

        return present;


    }

    private EmployeeNode nextInList(EmployeeNode x)
    {
        return x.link;
    }



   public boolean isEmpty()
   {
      return ( first == null );
   } // end of isEmpty()

    public HumanResources()
    {
        first = null;
    }

    public HumanResources ( employee x)
    {
        this.data = x;
    }






    public boolean addEmployee( employee emp)
    {

        EmployeeNode current = new EmployeeNode();
        current = first;

            if (current == null)
            {
                first = new EmployeeNode(emp);
                return true;

            }
            else
            {
                while(current.link != null)
                {
                    EmployeeNode temp = new EmployeeNode();
                    temp.data = emp;
                    temp.link = current;
                }
                return true;
            }
    }

    public Employee findEmployee(String EmpNumber)
    {
        EmployeeNode current = first;
        if(first == null)
        {
            return null;
        }
        else{
            while (current != null)
            {






    public String toString()
    {
        EmployeeNode display;
        display = first;
        String temp = "";

        while(display != null)
        {
            temp += display.data + "\n";
            display = display.link;

        }
        return temp;
    }


}

这是我的员工班

import java.util.*;
/**
This class manipulate information relating to employees
*/
public class employee {

    private String empNumber;
    private String name;
    private String department;
    private double salary;
    /**
    Zero parameter constructor that sets the values to null
    */
    public employee()
    {
        empNumber = null;
        name = null;
        department = null;
        salary = 0.0;
    }

    /**
    Four parameter constructor to initialize the data members to the give values

    @param kempnumber Employee's ID number
    @param kname Employee's name
    @param kdepartment Employee's department name
    @param ksalary Employee's salary
    */
    public employee(String kempnumber, String kname, String kdepartment, double ksalary)
    {
        empNumber = kempnumber;
        department=kdepartment ;
        name = kname;
        salary = ksalary;

    }
    /**
    copy constructor
    */
    public employee (employee copy)
    {
        empNumber = copy.empNumber;
        name = copy.name;
        department = copy.department;
        salary = copy.salary;

    }
    /**
    Four parameter constructor to set data members to given value
    @param kname Employee's name
    @param kdepartment Employee's department name
    @param ksalary Employee's salary
    */
    public void setEmployee(String kempnumber, String kname, String kdepartment, double ksalary)
    {
        empNumber = kempnumber;
        department=kdepartment ;
        name = kname;
        salary = ksalary;
    }



    public String getEmpNumber() {
        return empNumber;
    }

    public void setEmpNumber(String empNumber) {
        this.empNumber = empNumber;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary)
    {
        this.salary = salary;
    }

    public String toString()
    {
            return (empNumber + " " + name + " " + department + " " +salary);
    }


    public boolean equals(employee compareto) {

        int firstemployee = Integer.parseInt(empNumber);
        int secondemployee = Integer.parseInt(compareto.empNumber);

        if (firstemployee == secondemployee) {

            return true;
        }

        else {

            return false;
        }

    }


    public int compareTo(employee compareto)
    {
        int less = -1;
        int same = 0;
        int more = 1;
        int firstemployee = Integer.parseInt(empNumber);
        int secondemployee = Integer.parseInt(compareto.empNumber);

            if(firstemployee > secondemployee)
            {
                return more;
            }

            else if(firstemployee == secondemployee)
            {
                return same;
            }

            else
            {
                return less;
            }

        }
    }

1 个答案:

答案 0 :(得分:0)

对于addEmployee方法,如果要添加到列表的前面,则根本不需要while循环。你的第一个'变量可能维持对循环前面的引用,因此您需要做的就是创建员工,更新链接并指向“第一个”。走向它。像这样......

public boolean addEmployee( employee emp){

    if (first == null)  {
        first = new EmployeeNode(emp);
        return true;
    }
    else {  // first must != null
        EmployeeNode temp = new EmployeeNode(emp); //create the new employee
        temp.link = first; // link the new employee to the old employee at the front of the list

        first = temp; //update the new front of list to be the new employee
        return true;
    }
}

请记住,如果您想将其添加到列表的 end ,您需要一个while循环来搜索列表并在创建新员工和更新之前找到结束链接。

如果您对链接感到困惑,请尝试单步执行代码并使用线条绘制节点以表示链接,以帮助您了解链接列表的可视化。