0

我必须将链接列表中的所有标记左移一个位置。

这是我的方法代码:

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);
}
*/

当我调用该方法时,在运行时出现空指针错误。任何帮助,将不胜感激。谢谢。

4

3 回答 3

0

我假设head并且正确tail更新insertremove

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 回答