【问题标题】:Reversing a linked list using recursive method使用递归方法反转链表
【发布时间】:2019-03-23 00:50:26
【问题描述】:

我无法解决此代码问题。我需要使用 Java 中的递归方法来反转链表。我似乎无法弄清楚,我已经尝试了我的知识范围。非常感谢您的帮助。

// Java program for reversing the linked list

class MyLinkedList {

    static Node head;

    static class Node {

        int data;
        Node next;

        Node(int d) {
            data = d;
            next = null;
        }
    }

    /* Function to reverse the linked list */
    Node reverse(Node node) {


          add content      


        node = prev;
        return node;
    }

    // prints content of double linked list
    void printList(Node node) {
        while (node != null) {
            System.out.print(node.data + " ");
            node = node.next;
        }
    }

    public static void main(String[] args) {
        MyLinkedList list = new MyLinkedList();
        add content    }
}

【问题讨论】:

  • 为什么需要递归执行此操作?列表是双向链表吗?这是作业吗?!
  • 您到底尝试过什么?这个问题听起来像家庭作业或实验室。针对这个特定问题,Google 上有大量资源。

标签: java recursion methods


【解决方案1】:

而不是“添加内容”应该有:

  1. 记住您的下一个节点引用的节点。
  2. next 节点的字段分配您的 当前 节点的值。
  3. 下一个节点设为当前节点。
  4. 将步骤 1 中的节点设为下一个
  5. 转到 1

(A) -> (B) 其中 A 是 当前 节点,B 是 下一个节点。

【讨论】:

    【解决方案2】:

    在尝试使用递归解决此问题之前,请先想象一下。

    给定 (1)->(2)->(3)->

    初始化 3 个变量 prev = null; cur = 1;下一个 = 2;

    现在要反转这个,从当前节点开始,它必须指向前一个节点,但是这样做我们失去了 1 和 2 之间的链接。为了保持链接设置 next = 2。现在当前的 1 现在可以指向上一个值,即 cur.next = prev.

    所以现在我们有 (3)->

    然后要进行下一次迭代,您只需更新 prev = cur 和 cur = next。

    通过重复执行此操作直到达到 null,链表会以这种方式更新。

    所以这可以通过这样的while循环来完成

    Node prev = null;
    Node cur = node;
    Node next;
    while (cur != null) {
        next = cur.next;
        cur.next = prev;
        prev = cur;
        cur = next;
    }
    
    return prev;
    

    现在要使用递归来执行此操作,您只需要具有 3 个参数,即 prev、cur 和 next。定义你的基本情况(当函数达到空值时应该做什么)。然后在while循环里面做4行代码然后调用递归函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 2017-01-23
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多