Eternal Punishment
Eternal Punishment

Reputation: 131

Writing a method to sort a singly linkedlist in ascending order (java)

the method 'insertAscending' only gives me the first number even after i enter new ones. can anyone help with what i'm doing wrong? Thanks.

public class LinkedList13 { // Private inner class Node

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



}

}

Upvotes: 1

Views: 8376

Answers (3)

Eran
Eran

Reputation: 393801

First of all, you should return after setting the head of the list (when the first element is added).

Second of all, you should handle the case where the newly inserted node is the smallest in the list (and therefore should come first). Your loop never compares the added node to the head of the list.

Finally, if the added element wasn't inserted in the while loop, it should be inserted after the while loop.

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

Upvotes: 1

Don Bottstein
Don Bottstein

Reputation: 1660

Hint: is (p.link != null) ever true?

Upvotes: 3

Dima
Dima

Reputation: 40500

Check out your if condition if(p.link.data > data) the only way a node gets into the list is when that is true. This means, that, if the value of data being inserted it greater than (or equal to) everything that's been inserted so far, it will be discarded.

An easy way to fix this is change break to return and add p.link=node at the end (after the loop).

Upvotes: 0

Related Questions