编写一个方法按升序对单个链表进行排序(java)

时间:2014-12-05 20:31:54

标签: java linked-list

方法'insertAscending'仅在我输入新数字后才给出第一个数字。谁能帮助我做错了什么?谢谢。

公共类LinkedList13 {     //私有内部类节点

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;
     }



}

}

3 个答案:

答案 0 :(得分:2)

提示:是(p.link!= null)是真的吗?

答案 1 :(得分:0)

查看您的if条件if(p.link.data > data) node进入列表的唯一方法是何时为真。这意味着,如果插入的data的值大于(或等于)到目前为止已插入的所有内容,则将被丢弃。

解决此问题的一种简单方法是将break更改为return并在结尾处(循环之后)添加p.link=node

答案 2 :(得分:0)

首先,您应该在设置列表的头部后(当添加第一个元素时)返回。

其次,您应该处理新插入的节点在列表中最小的情况(因此应该首先出现)。您的循环从不将添加的节点与列表的头部进行比较。

最后,如果添加的元素没有插入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;
}