0

Linked List 内のすべてのトークンを 1 ポジション左にシフトする必要があります。

メソッドのコードは次のとおりです。

private LLNode<E> head;     // the first node in the list
private LLNode<E> tail;     // the last node in the list

public void shiftLeft()
{
    LLNode<E> temp = new LLNode<E>();
    temp = head;
    head = head.next;
    tail.next = temp;
}

/*from main method
TopSpinLinkedList<Integer> ll = new TopSpinLinkedList<Integer>(numTokens, spinSize);

//fills LinkedList with tokens
for(int i = 1; i <= numTokens; i++) {
    ll.add(i);
}
*/

メソッドを呼び出すと、実行時に nullpointer エラーが表示されます。どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

0

headと がとtailで適切に更新されているinsertと仮定しますremove

public void shiftLeft()
{
    if(head == null || head.next == null){
       return;    
    }
    LLNode<E> temp = new LLNode<E>();     
    temp = head;           
    head = head.next;  
    temp.next = null;   
    tail.next = temp;  
    tail = temp;  
}  

更新:
コメントから、OPが循環リストについて言及していることがわかります。これはOPに記載されていないか、コードから明らかです。答えはそのままにしておきます。

于 2013-04-15T09:23:59.353 に答える
0

それが循環リンクリストであり、add メソッドが適切に機能する場合。

public void shiftLeft(){
    head = head.next; tail = tail.next;
}
于 2013-04-15T09:30:59.553 に答える
0

いくつかの点について考える必要があります:
1) リンク リストに要素が含まれていない場合はどうすればよいでしょうか。
2) すべてのトークンをシフトするには、while ループを使用する必要があります。

于 2013-04-15T09:22:10.990 に答える