拆分LinkedList对象

时间:2018-11-14 02:46:37

标签: java oop linked-list

我需要构造并返回一个新的Q,其中包含该Q的第二个“一半”。

我要完成的事情的例子

  • 分裂前的这个Q:1、3、4、8、14
  • 拆分后的这个Q:1、3
  • 新问:4、8、14

  • 分裂前的这个Q:1、3、4、8
  • 拆分后的这个Q:1、3
  • 新问:4、8

类Q使用Java类库中的LinkedList类实现队列ADT。下面的Q类

import java.util.LinkedList;
public class Q {

// all Q objects have the same default capacity...
private final static int DFLT_CAPACITY = 4;

// every Q object has the following instance variables...
private LinkedList<Object> ll;
private int capacity;

/**
* Constructs an empty Q having DFLT_CAPACITY.
*/
public Q() {
  this(DFLT_CAPACITY);
}

/**
* Constructs an empty Q having client supplied capacity.
*
* @param capacity switched to DFLT_CAPACITY if less than one
*/
public Q(int c) {
  capacity = c < 1 ? DFLT_CAPACITY : c;
  ll = new LinkedList<Object>();
}

我的问题是我需要返回一个Q对象,但是我有一个LinkedList。我知道这种尝试是完全有缺陷的,但是我已经被卡住了一段时间了。

public Q split() {
   int split = ll.size() / 2;
   for (int i = 0; i < split; i++) {
       ll.remove(i);
   }
   Q newQ = (Q) ll.clone();
   return newQ;

}

1 个答案:

答案 0 :(得分:1)

使用LinkedList的{​​{3}}方法。
注意: 阅读上面链接的javadoc,以了解其工作原理!

您还需要一个新的(私有)构造函数来创建新的Q对象。

以下内容假设现有的Q对象的capacity保持不变,并且新的Q对象“继承”了相同的容量。

private Q(int c, LinkedList<Object> ll) {
    this.capacity = c;
    this.ll = ll;
}

public Q split() {
    List<Object> secondHalf = this.ll.subList(this.ll.size() / 2, this.ll.size());
    Q newQ = new Q(this.capacity, new LinkedList<>(secondHalf));
    secondHalf.clear();
    return newQ;
}