2012-01-22 15 views
2

我有一个关于LinkedList的问题,我用它来实现一个队列。如何将所有停留在定义元素之前的元素移至尾部?假设我需要将所有停留在第三个元素之前的元素移到尾部(请参见下面的示例)。这意味着号码12应该移动到尾部以获得:3->4->1->2如何将所有停留在LinkedList中已定义元素之前的元素移至尾部?

是否有可能做类似list1.moveToTheTail(startElem,endElem);其中startElemendElem表示要移动到尾部的元素边界?

import java.util.LinkedList;

public class Test { 
    public static void main(String[] args) { 
     LinkedList<Integer> list1 = new LinkedList<Integer>(); 
     list1.addLast(1); 
     list1.addLast(2); 
     list1.addLast(3); 
     list1.addLast(4); 
     list1. 
     System.out.println(list1); 
    } 
} 

回答

1

没有没有这样的功能..这是因为从前面到尾部操作移动一个遗憾只是第一个元素的“指针”的改变。

但是你想一个函数从列表的中间也动...好了:

public static void moveToTail(LinkedList<?> list,int startElement, int endElement) { 
    if (startElement <0) 
     return ; 
    if (endElement < startElement) 
     return; 
    if (endElement >= list.size()) 
     return; 
    for(int i = startElement ; i < endElement ; ++i) { 
     //yeah it has to be startElement and not i 
     list.addLast(list.remove(startElement)); 
    } 
} 
+1

这不是有效的Java代码,它不会编译 –

+0

对不起,我目前使用了很多编程语言,只在这里写入代码在文本框中..将函数改为public static void .. – rauschen

1

删除它们,并重新添加它们,从第一个开始。

1

使用polladd方法从头部的元素移动到Queue的尾巴:

public static void moveToTail(int nElements, Queue<?> queue) { 
    // Do some checkings here if necessary 
    for(int i = 0 ; i < nElements ; ++i) { 
     queue.add(queue.poll()); 
    } 
} 
0

试试这个方法,它会修改该列表中的位置:

public static <T> List<T> moveToTheTail(List<T> list, int startElem, int endElem) { 
    for (int i = startElem; i < endElem; i++) 
     list.add(list.remove(startElem)); 
    return list; 
} 

上述方法假定索引对列表有效。使用这样的:指数startElem和小于endElem之间将从列表中删除,并添加到年底

List<Integer> list1 = new LinkedList<Integer>(); 
list1.add(1); 
list1.add(2); 
list1.add(3); 
list1.add(4); 

list1 = moveToTheTail(list1, 0, 2); 
System.out.println(list1); 

所有元素。而且由于它使用泛型,它适用于任何实现包含任何类型元素的接口的类。

相关问题