2017-02-19 12 views
-2

整数をファイルからリンクリストに読み込み、挿入ソートを使用してリストをソートしてから、マシンが挿入ソートを完了するまでの時間を報告する必要がありますjavaを使用します。現在のところ、私のコードは、ファイルからの読み込みを除いてすべて正しく行います。最初と最後の数字だけを読み込みます。たとえば、番号が1から5000までのファイルから逆の順序で読み込むと、5000と1だけが読み込まれ、並べ替えられます。ファイルから読み込んだ整数をリンクリストにソートするJava

ファイルからすべての整数をListNodesに読み込むにはどうすればよいですか?コードは以下の投稿:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.*; 

class ListNode { 
    int val; 
    ListNode next; 

    ListNode(int x) { 
     val = x; 
     next = null; 
    } 
} 

public class InsertionLinkedList { 

    public static ListNode insertionSortList(ListNode head) { 

     long start = System.nanoTime(); 
     if (head == null || head.next == null) 
      return head; 

     ListNode newHead = new ListNode(head.val); 
     ListNode pointer = head.next; 

     // loop through each element in the list 
     while (pointer != null) { 
      // insert this element to the new list 

      ListNode innerPointer = newHead; 
      ListNode next = pointer.next; 

      if (pointer.val <= newHead.val) { 
       ListNode oldHead = newHead; 
       newHead = pointer; 
       newHead.next = oldHead; 
      } else { 
       while (innerPointer.next != null) { 

        if (pointer.val > innerPointer.val && pointer.val <= innerPointer.next.val) { 
         ListNode oldNext = innerPointer.next; 
         innerPointer.next = pointer; 
         pointer.next = oldNext; 
        } 

        innerPointer = innerPointer.next; 
       } 

       if (innerPointer.next == null && pointer.val > innerPointer.val) { 
        innerPointer.next = pointer; 
        pointer.next = null; 
       } 
      } 

      // finally 
      pointer = next; 
     } 
     long time = System.nanoTime() - start; 
     System.out.printf("The time taken was %.1f ns%n", (double) time); 
     return newHead; 
    } 

    public static void main(String[] args) throws FileNotFoundException { 

     Scanner scanner = new Scanner(new File("random5k.txt")); 
     ListNode insertion = new ListNode(scanner.nextInt()); 
     while(scanner.hasNextInt()){ 
      ListNode nextNode = new ListNode(scanner.nextInt()); 
      insertion.next = nextNode; 
     } 

     insertion = insertionSortList(insertion); 
    } 
} 
+0

ようこそスタックオーバーフロー!宿題の助けを求めているようです。それ自体に問題はありませんが、これらのことを守ってください(http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845)、それに応じて質問を編集してください。 (これは宿題でなくても、とにかくアドバイスを検討してください) –

+0

私はそれらのdosとdontのものにマッチするように私の質問を修正しました。 –

+0

それは良いですが、デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、より具体的な質問に戻ってください。 –

答えて

-1

現在、私のコードは、右 ファイルからの読み取りを除いてすべてがない、それが唯一の最初と最後の番号に読み込みます。たとえば、 の番号が1から5000のファイルから逆順に読み取ると、 は5000と1だけを読み込み、並べ替えます。

ファイルからすべての数値を正しく読み取っています。 ListNodeオブジェクトinsertionを配置しようとすると、各ノードのnextが実際の次のノードを指すことはありません。あなたのプログラムの私の編集を見てください。

public static void main(String[] args) throws FileNotFoundException { 

Scanner scanner = new Scanner(new File("random5k.txt")); 
ListNode insertion = new ListNode(scanner.nextInt()); 
ListNode intNodes = insertion; 
while(scanner.hasNextInt()){ 
    ListNode nextNode = new ListNode(scanner.nextInt()); 
    insertion.next = nextNode; 
    insertion = nextNode; 
} 
intNodes = insertionSortList(intNodes); 
} 
+0

質問にはソートが必要ですが、あなたの答えはそれを達成できません。空のリストでも失敗します。 – EJP

+0

@EJP、申し訳ありません。私は完全な質問を読む前に答えを出そうとしました。私は自分の答えを編集しました。 – VHS

+0

ようこそ。あなたはこの回答に否定的な投票をしてください。 – VHS

関連する問題