编写按升序对单个linkedlist排序的方法(java)

编写按升序对单个linkedlist排序的方法(java),java,linked-list,Java,Linked List,“insertAscending”方法仅在我输入新数字后才给我第一个数字。有人能帮我解决我做错的事吗?谢谢 公共类链接列表13{ //私有内部类节点 private class Node{ int data; Node link; public Node(){ data = Integer.MIN_VALUE; link = null; } public Node(int x, Node p){ dat

“insertAscending”方法仅在我输入新数字后才给我第一个数字。有人能帮我解决我做错的事吗?谢谢

公共类链接列表13{ //私有内部类节点

private class Node{
    int data;
    Node link;


    public Node(){
        data = Integer.MIN_VALUE;
        link = null;
    }

    public Node(int x, Node p){
        data = x;
        link = p;
    }
}
// End of Node class

public Node head;

public LinkedList13(){
    head = null;
}

public void insertAscending(int data){

    Node node = new Node();
    node.data = data;

     if (head == null)
         head = node;
     Node p = head;

     while (p.link != null)
     {
         if (p.link.data > data)
         { node.link = p.link;
           p.link = node;
           break;
         }
         p= p.link;
     }



}
}

检查if条件ifp.link.data>数据节点进入列表的唯一方式是当该条件为真时。这意味着,如果插入的数据的值大于或等于目前为止插入的所有数据,则该数据将被丢弃

解决此问题的简单方法是将break更改为return,并在循环结束后添加p.link=node

查看if条件ifp.link.data>数据节点进入列表的唯一方式是当该条件为真时。这意味着,如果插入的数据的值大于或等于目前为止插入的所有数据,则该数据将被丢弃


解决此问题的简单方法是将break更改为return,并在循环结束后添加p.link=node

提示:是p.link!=空值是否为真?

提示:是p.link!=null是否为true?

首先,在添加第一个元素时,您应该在设置列表的标题后返回

其次,您应该处理新插入的节点是列表中最小的节点,因此应该排在第一位的情况。循环从不将添加的节点与列表的开头进行比较

最后,如果添加的元素未插入while循环中,则应将其插入while循环之后

public void insertAscending(int data)
{
    Node node = new Node();
    node.data = data;

    if (head == null) {
        head = node;
        return;
    } else if (node.data < head.data) {
        node.link = head;
        head = node;
        return;
    }
    Node p = head;

    boolean added=false;
    while (p.link != null)
    {
        if (p.link.data > data)
        { 
           node.link = p.link;
           p.link = node;
           added = true;
           break;
        }
        p = p.link;
    }
    if (!added) 
        p.link = node;
}

首先,您应该在添加第一个元素时设置列表的标题后返回

其次,您应该处理新插入的节点是列表中最小的节点,因此应该排在第一位的情况。循环从不将添加的节点与列表的开头进行比较

最后,如果添加的元素未插入while循环中,则应将其插入while循环之后

public void insertAscending(int data)
{
    Node node = new Node();
    node.data = data;

    if (head == null) {
        head = node;
        return;
    } else if (node.data < head.data) {
        node.link = head;
        head = node;
        return;
    }
    Node p = head;

    boolean added=false;
    while (p.link != null)
    {
        if (p.link.data > data)
        { 
           node.link = p.link;
           p.link = node;
           added = true;
           break;
        }
        p = p.link;
    }
    if (!added) 
        p.link = node;
}

while循环永远不会执行。将head设置为第一个节点后,p.link==head.link==null。while循环永远不会执行。将head设置为第一个节点后,p.link==head.link==null。我应该在p=p.link之前还是之后添加p.link=节点?在循环之后。另请参见关于p.link的其他答案!=null总是错误的。这实际上是一个更大的问题。我应该在p=p.link之前还是之后添加p.link=node?在循环之后。另请参见关于p.link的其他答案!=null总是错误的。这实际上是一个更大的问题。上一个节点不是这样吗?很好!我错过了@永恒的惩罚,是虚假的最后一个节点。想一想在你的代码中发生了什么事情?这是真的吗?@永恒惩罚考虑列表长度=1的情况。最后一个节点不是真的吗?好点!我错过了@永恒的惩罚,是虚假的最后一个节点。想想在你的代码中会发生什么事情,这是真的吗?@永恒惩罚考虑列表长度=1的情况。我真的很感激6年后的解释,这对我帮助很大。泰:我真的很感激6年后的解释,这帮了我很大的忙。泰: