使用递归方法反转链表

时间:2019-03-23 00:50:27

标签: java recursion methods

我无法解决此代码问题。我需要使用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    }
}

2 个答案:

答案 0 :(得分:0)

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

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

(A)->(B),其中A是 当前 节点,B是 next 节点。

答案 1 :(得分:0)

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

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

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

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

所以现在我们有了<-(1)(2)->(3)->

然后转到下一个迭代,您只需更新prev = cur和cur = next。

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

<-(1)<-(2)(3)->

<-(1)<-(2)<-(3)

因此,可以使用类似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行代码,然后调用递归函数。