2016-08-22 45 views
0

這裏是我寫的代碼,它工作正常,直到我到達循環,它崩潰顯示NullPointerException異常我想將2排序LinkedList合併到一個排序列表,但得到NullPointerException?

貌似我在這裏失去了一些東西非常基本的..但是當我運行筆&算法我沒有看到任何問題。

我在做什麼錯請幫忙!

package lesson.datastructure; 

public class MergeSort { 

    public static Node getSortedNode1(){ 
     Node n1=new Node(); 
     n1.value=2; 
     Node n2=new Node(); 
     n2.value=76; 
     Node n3=new Node(); 
     n3.value=98; 
     n1.next=n2; 
     n2.next=n3; 
     n3.next=null; 
     return n1; 
    } 
    public static Node getSortedNode2(){ 
     Node n1=new Node(); 
     n1.value=23; 
     Node n2=new Node(); 
     n2.value=65; 
     Node n3=new Node(); 
     n3.value=87; 
     n1.next=n2; 
     n2.next=n3; 
     n3.next=null; 
     return n1; 
    } 
    public static void printNode(Node head,String name){ 

     System.out.println(name); 
     while(head!=null){ 
      System.out.print(head.value+"->"); 
      head=head.next; 
     } 
     System.out.println("\n\n"); 
    } 

    /* Main method ignore all other methods */ 
    public static void main(String[] args){ 

     Node head1,head2; 
     head1=getSortedNode1(); 
     head2=getSortedNode2(); 

     printNode(head1, "List 1"); 
     printNode(head2, "List 2"); 

     Node sortedMergedList=null; 

     if(head1.value<head2.value){ 
      Node nextNode=head1.next; 
      Node isolatedNode=null; 
      isolatedNode=head1; 
      isolatedNode.next=sortedMergedList; 
      sortedMergedList=isolatedNode; 
      head1=nextNode; 
     } 
     else 
     { 
      Node nextNode=head2.next; 
      Node isolatedNode=null; 
      isolatedNode=head2; 
      isolatedNode.next=sortedMergedList; 
      sortedMergedList=isolatedNode; 
      head2=nextNode; 
     } 


     while(head1!=null || head2!=null){ 
     //Null pointer here while accessing head1 or head2 
      if(head1.value<head2.value){ 
       Node nextNode=head1.next; 
       Node isolatedNode=null; 
       isolatedNode=head1; 
       isolatedNode.next=sortedMergedList; 
       sortedMergedList=isolatedNode; 
       head1=nextNode; 
      } 
      else 
      { 
       Node nextNode=head2.next; 
       Node isolatedNode=null; 
       isolatedNode=head2; 
       isolatedNode.next=sortedMergedList; 
       sortedMergedList=isolatedNode; 
       head2=nextNode; 
      } 

     } 
      printNode(sortedMergedList, "merged sorted list"); 

    } 


    } 
+0

你會在哪一行得到'NullPointerException'? –

+0

@rD。更新了顯示錯誤區域的答案,我做錯了什麼? –

+0

我不認爲這是完全重複的。 –

回答

0

我認爲選擇頭應該是value和isNull的條件,所以isNull條件應該在下面加上like。

if(head1!=null&&(head2==null||head1.value<head2.value)){ 
+0

必須是'||',因爲您需要* both *列表中的所有值。這是'head1.value Andreas

+0

對不起,我沒有閱讀所有的代碼,現在答案是更新。 –