2014-11-05 6 views
0

Здравствуйте, я пытаюсь написать список вставки в java, но, похоже, я не знаю, когда у меня есть цикл while, который не заканчивается в методе sortInsertion моего класса. Незлая помощь.Вставка списка Связанный список Java {Debug}

public class LinkedList { 

    public static void main(String[] args) { 
     LinkedList numbers = new LinkedList(); 

     numbers.enqueue(12); 
     numbers.enqueue(4); 
     numbers.enqueue(11); 
     numbers.enqueue(8); 
     numbers.enqueue(10); 

     numbers.sortInsertion(numbers.startNode); 

     //System.out.println(s); 

    } 



    private int numValues; 
    private Node startNode; 
    private Node endNode; 
    private Node currNode; 

    /** Constructor for BoundedQueue 
    * @param inputSize maximum size of the Queue 
    */ 
    public LinkedList() { 
     numValues = 0; 

    } 

    /** 
    * @return the current number of element in Queue 
    * Useful for testing 
    */ 

    public int size() { 
     return numValues; 
    } 

    /** Adds a new value to the end of the queue 
    * 
    * @param value the integer to be added 
    */ 

    public void enqueue(int value) { 
      this.currNode = new Node(value); 
      if (this.startNode == null) { 
       this.startNode = this.currNode; 
       this.endNode = this.startNode; 
      } else { 
       this.endNode.next = this.currNode; 
       this.endNode = this.currNode; 
      } 

      numValues++; 

    } 



    public String toString(Node startNode) { 

     String s=""; 
     Node trav = startNode; 

     while(trav != null) { 
      s += trav.value; 
      s+=","; 
      trav = trav.next; 
     } 
     return s; 



    } 




    public Node sortInsertion(Node head) { 
     if(head == null || head.next == null) 
      return head; 


     Node sort = null; 
     Node trav = null; 
     Node travSort = null; 
     Node prevSort = null; 

     sort = head; 
     trav = head.next; 
     sort.next = null; 




     while(trav != null) { 
      travSort = sort; 
      System.out.println(travSort.value); 
      while(travSort != null) { 
       if(travSort.value > trav.value) { 
        Node temp = trav; 
        temp.next = travSort; 
        travSort = temp; 

        if(prevSort != null) { 
         prevSort.next = travSort; 
        } 

        if(sort.value == travSort.value) { 
         sort = travSort; 
        } 
        break; 

       } 

       prevSort = travSort; 
       travSort = travSort.next; 
       //System.out.println(travSort.value); 

      } 

      trav = trav.next; 
     } 


     System.out.println(toString(sort)); 

     return sort; 
    } 




    private class Node { 

     private int value; 
     private Node next; 

     public Node(int val) { 
      value = val; 
      next = null; 
     } 

    } 
} 
+0

Вы пробовали пройти через него с помощью отладчика и посмотреть, какие переменные содержатся на каждой итерации? Или даже шагнул через это рукой? – forgivenson

+0

Каким должен быть метод sortInsertion (Node)? – Chip

ответ

0

Похоже, вы создаете бесконечную избыточность в следующих строках:

Node temp = trav; (1) 
temp.next = travSort; (2) 
travSort = temp; (3) 

Так темп == Трав (1), но temp.next = trav.next но temp.next == travSort (2). Однако (3) устанавливает travSort = темп

Поэтому travSort.next == temp.next == travSort

, которая является причиной вашего времени петли никогда не заканчивается, потому что как только вошел travSort никогда не может быть пустым.

Смежные вопросы