为链表类编写replace()方法

时间:2015-03-05 04:21:57

标签: java replace linked-list

我在编写名为replace()的I类建筑物的LString方法时遇到问题。该类为构建字符串创建链接列表对象,类似于StringStringBuilder,但使用链接列表而不是数组。

replace(int start, int end, LString lStr)是一种通过在LString的节点之间插入另一个名为LString的{​​{1}}来更改给定lStr链接列表的方法。 start。我正在努力想出一种有效的写作方式。任何建议都值得赞赏,试图学习Java。

以下是我的代码,end靠近底部:

replace()

2 个答案:

答案 0 :(得分:0)

这是替换方法

public LString  replace(int start, int end, LString lStr)   {
    if (start < 0 || end > this.length() || start > end) {
     throw new IndexOutOfBoundsException();
  }

  LString repString = new LString();

  node node = this.front;
  node cpy = new node(node.data);

  repString.front = cpy;

  for (int i = 0; i < start; i++) {
     node  = node.next;
     cpy = cpy.next = new node(node.data);
  }
  node nIt = node;
  node =  lStr.front;

  for (int i = start+1; i < end; i++) {
        node  = node.next;
        nIt = nIt.next;
        cpy = cpy.next = new node(node.data);
  }
  node = nIt;
  for (int i = end; i < this.length(); i++) {
      node  = node.next;
     cpy = cpy.next = new node(node.data);
  }

  return repString;

}

为您的编码实践。

  • 始终在Java中创建类名Capital的第一个字母(例如:private class Node
  • 使用方法获取对象中的属性或字段(例如:node.next()).

答案 1 :(得分:0)

由于您的replace()方法返回LString,我假设您希望结果为副本。否则我建议就地替换,因为LString是可变的。

这是一个经过测试的功能实现供您考虑。

public LString replace(int start, int end, LString lStr) {
    if (start < 0 || end > length() || start > end) {
        throw new IndexOutOfBoundsException();
    }
    LString result = new LString();
    node node = this.front;
    node copy = new node(node.data);
    result.front = copy;
    for (int i = 1; i < start; i++) {
        node = node.next;
        copy = copy.next = new node(node.data);
    }
    node replace = lStr.front;
    for (int i = 0; i < lStr.length(); i++) {
        copy = copy.next = new node(replace.data);
        replace = replace.next;
    }
    for (int i = start; i < end; i++) {
        node = node.next;
    }
    for (int i = end; i < length(); i++) {
        node = node.next;
        copy = copy.next = new node(node.data);
    }
    result.size = length() + lStr.length() - (end - start);
    return result;
}

不幸的是,另一个答案中的代码被窃听了。看起来@Jemaro从我的其他答案中复制了substring()方法并尝试使其适合于此而不进行测试,但没有成功。