2016-10-10 5 views
0
public class doubleLinkedList { 

    class Node { 
     String value; 
     Node prev; 
     Node next; 

     Node(String val, Node p, Node n) { 
     value = val; 
     prev = p; 
     next = n; 
     } 

     Node(String val) { 
     value = val; 
     prev = null; 
     next = null; 
     } 
    } 

    Node first; 
    Node last; 

    public doubleLinkedList() { 
     first = null; 
     last = null; 
    } 

    public boolean isEmpty() { 
     if (first == null) 
     return true; 
     else 
     return false; 
    } 

    /**The size method returns the length of the linked list 
    * @return the number of element in the linked list 
    */ 
    public int size() { 
     int count = 0; 
     Node traverse = first; 
     while (traverse != null) { 
     count++; 
     traverse = traverse.next; 
     } 
     return count; 
    } 


    public void add(String element) { 

     if (isEmpty()) { 
     first = new Node(element); 
     last = first; 
     } else { 

     Node p = first; 
     Node elementTobeAdded; 
     while (((p.value).compareTo(element)) > 0 && p.next != null) { 
      p = p.next; 
     } 

     if (p.next != null) { 
      elementTobeAdded = new Node(element, p, p.next); 
      p.next.prev = elementTobeAdded; 
      p = elementTobeAdded.prev; 
     } else { 
      elementTobeAdded = new Node(element, p, null); 
      p.next = elementTobeAdded; 
      elementTobeAdded.next = null; 
      last = elementTobeAdded; 
     } 

     } 
    } 

    public void printForward() { 
     Node printNode = first; 
     while (printNode != null) { 
     System.out.print(printNode.value + ", "); 
     printNode = printNode.next; 
     } 
    } 
    } 
    public class test { 

    public static void main(String[] args) { 
     doubleLinkedList car = new doubleLinkedList(); 
     car.add("Jeep"); 
     car.add("benz"); 
     car.add("Honda"); 
     car.add("Lexus"); 
     car.add("BMW"); 
     car.printForward(); 
    } 
    } 

私の追加メソッドは、アルファベット順にリストにノードを追加しようとしています。私のprintForwardメソッドはリストの各要素を出力します。 私の主な方法では、アルファベット順ではない "Jeep、benz、Honda、BMW"がプリントされています。私のメソッドは、リンクされたリストをアルファベット順でソートできないのはなぜですか?

+4

コードをデバッガでステップ実行しましたか? –

+0

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – David

答えて

0

これはリンクされたリストではありません...あなたは何らかのキューを書きました(オプションでデキューできます)。

あなたの質問について - 「追加」方法に誤りがあります。少なくとも、頭を前に移動する必要があるかどうかを確認する必要はありません。 ...(あなたの質問の書式設定を修正してください)あなたが別のバグを持っているが、このようなスタイルのソースを読むことがあまりにもハードである可能性があり

1

変更この

Node p = first; 

    Node elementTobeAdded; 

    while(((p.value).compareTo(element)) > 0 && p.next != null) 
    { 
    p = p.next; 
    } 

    if(p.next != null) 
    { 
    elementTobeAdded = new Node(element,p,p.next); 
    p.next.prev = elementTobeAdded; 
    p = elementTobeAdded.prev; 
    } 

    else 
    { 
    elementTobeAdded = new Node(element, p, null); 
    p.next = elementTobeAdded; 
    elementTobeAdded.next = null; 
    last = elementTobeAdded; 
    } 
からあなたのaddメソッドのための空でない場合

to this:

Node p = first; 
    while (p.value.compareTo(element) < 0 && p.next != null) { 
    p = p.next; 
    } 
    if (p.value.compareTo(element) > 0) { 
    Node toAdd = new Node(element, p.prev, p); 
    p.prev = toAdd; 
    if (toAdd.prev != null) { 
     toAdd.prev.next = toAdd; 
    }else { 
     first = toAdd; 
    } 
    }else { 
    Node toAdd = new Node(element, p, p.next); 
    p.next = toAdd; 
    if (toAdd.next != null) { 
     toAdd.next.prev = toAdd; 
    }else { 
     last = toAdd; 
    } 
    } 

ここには多くのエラーがありました。最大のものは、新しい要素をリストの先頭に挿入する必要があるかどうかを決して確認していないということでした。最初の要素が最初に来たはずであっても、新しい要素は常に最初の要素の後に挿入されました。

String.compareToメソッドは大文字を小文字よりも前に扱うため、「ベンダー」が最後にあることに注意してください。

関連する問題