在java中链接列表中的Shift元素

时间:2013-04-15 09:14:54

标签: java linked-list shift doubly-linked-list circular-list

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

这是我的方法代码:

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错误。任何帮助,将不胜感激。感谢。

3 个答案:

答案 0 :(得分:0)

你必须考虑一些问题:
1)如果您的链接列表中不包含任何元素,那么什么? 2)对于要移动的所有令牌,你必须使用while循环。

答案 1 :(得分:0)

我认为在headtail

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中没有提到,或者从代码中可以看出。我会按原样留下答案。

答案 2 :(得分:0)

如果是循环链接列表,并且您的添加方法正常工作。

public void shiftLeft(){
    head = head.next; tail = tail.next;
}