简体   繁体   English

从链接列表中删除和添加项目(Java)

[英]Removing and adding items from a linked list (Java)

The code I wrote does not work when I try out the test cases but I can't understand why. 当我尝试测试用例时,我编写的代码不起作用,但我不明白为什么。 My code is inside the 2 methods. 我的代码在2种方法中。 If you need the rest of the class files you can find them here https://www.cs.berkeley.edu/~jrs/61b/hw/hw3/ . 如果您需要其余的类文件,可以在https://www.cs.berkeley.edu/~jrs/61b/hw/hw3/中找到它们。 Note I edited the node class and created set and get methods. 注意我编辑了节点类并创建了set和get方法。 Could that be giving me errors or is my solution just wrong? 难道是给我错误还是我的解决方案是错误的?

/**
*  squish() takes this list and, wherever two or more consecutive items are
*  equals(), it removes duplicate nodes so that only one consecutive copy
*  remains.  Hence, no two consecutive items in this list are equals() upon
*  completion of the procedure.
*
*  After squish() executes, the list may well be shorter than when squish()
*  began.  No extra items are added to make up for those removed.
*
*  For example, if the input list is [ 0 0 0 0 1 1 0 0 0 3 3 3 1 1 0 ], the
*  output list is [ 0 1 0 3 1 0 ].
*
*  IMPORTANT:  Be sure you use the equals() method, and not the "=="
*  operator, to compare items.
**/

public void squish() {
// Fill in your solution here.  (Ours is eleven lines long.)
  SListNode previous = head;
  SListNode next;
  SListNode root = head;
  int x = 1;

  for (int counter = 0; counter < size; counter++)
  {
      next = previous.getNext();
      if (!previous.equals(next))
      {
          root.setNext(next);
          root = next;
          x++;
      }
      previous = previous.getNext();

  }
  size = x;
}

/**
*  twin() takes this list and doubles its length by replacing each node
*  with two consecutive nodes referencing the same item.
*
*  For example, if the input list is [ 3 7 4 2 2 ], the
*  output list is [ 3 3 7 7 4 4 2 2 2 2 ].
*
*  IMPORTANT:  Do not try to make new copies of the items themselves.
*  Make new SListNodes, but just copy the references to the items.
**/

public void twin() {
 // Fill in your solution here.  (Ours is seven lines long.)
 SListNode previous = head;
 SListNode next;

 for (int counter = 0; counter < size; counter++)
 {
     next = previous.getNext();
     previous.setNext(previous);
     previous = previous.getNext();
     previous.setNext(next);
 }
 size = 2*size;
}

I think this might be a problem on the list length not getting updated upon completion. 我认为这可能是列表长度在完成时未更新的问题。 The test cases might look for that and print out an error message when you forget to do that! 当您忘记这样做时,测试用例可能会寻找并打印出错误消息! (No biscuits!) (没有饼干!)

I'm not sure though, but it seems to be the most plausible explanation (looking at the test file and seeing how they explicitly stated that they check all invariants). 虽然我不确定,但这似乎是最合理的解释(查看测试文件,看看他们如何明确声明检查所有不变量)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM