【问题标题】:How to move to the tail all elements that stay before the defined element in LinkedList?如何将保留在 LinkedList 中定义元素之前的所有元素移到尾部?
【发布时间】:2012-01-22 13:18:17
【问题描述】:

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

是否可以做类似于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);
    }
}

【问题讨论】:

    标签: java queue linked-list tail


    【解决方案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));
        }
    }
    

    【讨论】:

    • 对不起,我目前使用很多编程语言,只在文本框中编写代码..将function更改为public static void..
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用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());
          }
      }
      

      【讨论】:

        【解决方案4】:

        试试这个方法,它会在原地修改列表:

        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;
        }
        

        上述方法假设索引对列表有效。像这样使用它:

        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);
        

        索引 startElem 和小于 endElem 之间的所有元素都将从列表中删除并添加到末尾。由于它使用泛型,因此它适用于任何实现了包含任何类型元素的List 接口的类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-20
          • 2022-11-21
          • 1970-01-01
          相关资源
          最近更新 更多