【问题标题】:Logic problems in Doubly Linked List双向链表中的逻辑问题
【发布时间】:2014-04-15 04:43:54
【问题描述】:

我的代码似乎出现了一些逻辑问题,我是编程新手,尤其是链表新手。 我在 DLL 中的方法看起来如何?从我的应用程序类调用时,它们似乎不起作用(添加后仅适用于第一个单词)。

public void addAfter(E elem, E prev) {   //use search method then insert
      if (search(prev) == null){
        insert(elem, last);
      }
      else{
        insert(elem, prev); //prev needs to be of type Node<E> rather than just <E> (????)
      }
    }

private void insert(E elem, Node<E> prev) { //HELP
      Node<E> newNode = new Node<E>(elem, prev, null);
         //if list is empty, add to front
      if (first == null) {
         first= newNode;
         last = newNode;
      } else if (prev == null){
         //addFirst(newNode);
         first.prev = newNode;
         newNode.next = first;
         first = newNode;
      }
      //if at end of list
      else if (prev.next == null){
         prev.next = newNode;
         last = newNode;
      }
      else{
         newNode.next = prev.next;
         newNode.next.prev = newNode;
         prev.next = newNode;
      }
   }

    * @param elem  The element to search for.
    * @return The first Node containing the given element, or null if no Node
    *         contains the element.
    */
   private Node<E> search(E elem) { //HELP
      for (Node<E> curr = first; curr != null; curr = curr.next){
         if (curr.element.equals(elem)){
            return curr;
         }
      }
      return null;
   }





public static void handleLine(String values, DLL<String> list){
      Scanner tokens = new Scanner(values);
      if (tokens.hasNext("[aesdpr]")){
         char command = tokens.next().charAt(0);
         System.out.println("test before switch");
         switch (command){
         case 'a':
            while (tokens.hasNext()){
              String nextToke = tokens.next();
               if (tokens.hasNext()){
                  list.addAfter(nextToke, tokens.next());

【问题讨论】:

  • 我认为这是家庭作业,因为 Java 中已经有一个双向链表,因此没有充分的理由自己实现一个。审查代码超出了 stackoverflow 的范围。我建议您阅读 LinkedList 中的代码,看看它是如何完成的,并将您编写的内容与他们编写的内容进行比较。
  • 您应该指定问题所在。给出一个你得到错误结果的操作示例,包括输入、预期输出和实际输出。

标签: java algorithm list doubly-linked-list


【解决方案1】:

问题出在这里:

public void addAfter(E elem, E prev) { //use search method then insert if (search(prev) == null){ insert(elem, last); } else{ insert(elem, prev); //prev needs to be of type Node<E> rather than just <E> (????) } }

首先,正如您所注意到的,您需要一个节点而不是E。此外,您会找到包含 prev 元素的节点。所以你应该在 if 语句之前添加Node&lt;E&gt; prevNode = search(prev);,并将prev 替换为prevNode

【讨论】:

    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    相关资源
    最近更新 更多