我必须将链表中剩下的所有标记移动一个位置。
下面是我的方法代码: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);
}
*/
在运行时调用该方法时出现空指针错误。任何帮助都会很感激。谢谢。
如果它是循环链表和您的添加方法工作正常。
public void shiftLeft(){
head = head.next; tail = tail.next;
}
你必须考虑以下几点:
1)如果你的链接列表不包含任何元素,然后呢?
2)对于所有要移动的令牌,你必须使用while-loop。
我假设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中没有提到这一点,从代码中也看不出来。我将保留答案。