【问题标题】:Splitting a LinkedList Object拆分 LinkedList 对象
【发布时间】:2018-11-14 02:46:36
【问题描述】:

我需要构造并返回一个新的 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;

}

【问题讨论】:

  • 我的问题是我需要返回一个 Q 对象,但我有一个 LinkedList。Q 中创建一个修改 LinkedList 的方法
  • 什么是capacity,它是如何在两个Q之间“分裂”的?

标签: java oop linked-list


【解决方案1】:

使用LinkedListsubList() 方法。
注意:阅读上面链接的 javadoc,这样你就知道它是如何工作的了!

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

以下假设capacity 对现有 Q 对象保持不变,并且新 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2014-08-14
    • 1970-01-01
    • 2021-11-17
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多