用java构建链表

用java构建链表,java,algorithm,data-structures,linked-list,Java,Algorithm,Data Structures,Linked List,我正试图根据用户的输入用java构建一个链表。 然而,我得到的返回列表似乎总是通过最后一个节点而不是第一个节点引用,这使得它不可行,对我也没有帮助。我试图通过引用第一个节点pos并返回引用来解决这个问题,但没有帮助。例如,对于输入-1,2,3,4,当尝试打印链接列表时,它只打印4。 代码 //输入:函数获取值 //输出:函数用给定的数字建立一个链表 公共静态节点构建列表(){ int-num; System.out.println(“为链表输入值(-999停止)”; num=reader.nex

我正试图根据用户的输入用java构建一个链表。 然而,我得到的返回列表似乎总是通过最后一个节点而不是第一个节点引用,这使得它不可行,对我也没有帮助。我试图通过引用第一个节点pos并返回引用来解决这个问题,但没有帮助。例如,对于输入-1,2,3,4,当尝试打印链接列表时,它只打印4。 代码

//输入:函数获取值
//输出:函数用给定的数字建立一个链表
公共静态节点构建列表(){
int-num;
System.out.println(“为链表输入值(-999停止)”;
num=reader.nextInt();
节点列表=新节点(num);
节点位置=列表;
while(num!=-999){
num=reader.nextInt();
如果(num!=-999){
Node newNode=新节点(num);
setNext(列表);
列表=新节点;
}
}
返回pos;
}

有人知道我做错了什么吗?我将非常感谢您的帮助。

除了使用节点对象,为什么不使用节点对象呢

您的代码如下所示:

//input : The function gets values
//output : The function builds a linked list with the given numbers
public static LinkedList<Integer> buildList(){
  int num = 0;      
  LinkedList<Integer> list = new  LinkedList<Integer>();
  while (num!=-999){
    System.out.println("Enter values for the linked list(-999 to stop)");
    num=reader.nextInt();
    if(num!=-999){
        list.add(num)
    }
  }
  return list;
}
//输入:函数获取值
//输出:函数用给定的数字建立一个链表
公共静态LinkedList构建列表(){
int num=0;
LinkedList=新建LinkedList();
while(num!=-999){
System.out.println(“为链表输入值(-999停止)”;
num=reader.nextInt();
如果(num!=-999){
list.add(num)
}
}
退货清单;
}

您没有在后面添加新条目。 问题在于这个

 Node<Integer> newNode=new Node<Integer>(num);
 newNode.setNext(list);
 list=newNode;
下面是一个在链表末尾附加新节点的正确版本

 Node<Integer> newNode = new Node<Integer>(num);
 list.setNext(newNode); //Link previous node to current node.
 list = newNode;
Node newNode=新节点(num);
list.setNext(newNode)//将上一个节点链接到当前节点。
列表=新节点;

注意:当用户输入-999作为第一个数字时,您必须注意这个问题。在这种情况下,您仍然会创建一个节点(如果这是您想要的,那就好了)。

首先,您不应该使用
节点
,而应该使用
列表
。 在您的例子中,它是
List List=newlinkedlist()

第二个问题是在所有迭代中创建一个新列表。在循环之前,您应该只使用一个
new

此代码将在以下情况下工作:

public static List<Integer> buildLitst() {
    List<Integer> list = new LinkedList<>();
    System.out.println("Enter values for the linked list (-999 to stop)");
    int number = reader.nextInt();

    while (number != -999) {
        list.add(number);
        number = reader.nextInt();
    }

    return list;
}
公共静态列表buildLitst(){
列表=新建LinkedList();
System.out.println(“为链表输入值(-999停止)”;
int number=reader.nextInt();
while(数字!=-999){
列表。添加(编号);
number=reader.nextInt();
}
退货清单;
}

有什么区别?我还没有学会使用关键字LinkedList,而只是手动创建单个节点并使用node类将它们链接在一起,我不确定我的老师是否会接受我使用它。没有关键字LinkedList。嘿,谢谢!你说得完全对我不知道为什么我错过了第一个号码,如果这是一个真正的程序,我会处理它,但是这个函数只是一个更大的程序的一小部分,它实际上不是我真正想做的事情的问题,它只是为了练习,只要我是唯一一个输入值的人,这不是一个大问题。做我所做的并不是每次迭代都创建一个新的列表但是一个新的节点,然而你是对的,在这种情况下使用列表会更容易
 Node<Integer> newNode = new Node<Integer>(num);
 list.setNext(newNode); //Link previous node to current node.
 list = newNode;
public static List<Integer> buildLitst() {
    List<Integer> list = new LinkedList<>();
    System.out.println("Enter values for the linked list (-999 to stop)");
    int number = reader.nextInt();

    while (number != -999) {
        list.add(number);
        number = reader.nextInt();
    }

    return list;
}