繁体   English   中英

使用递归方法反转链表

[英]Reversing a linked list using recursive method

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

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

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

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

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

鉴于(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。 定义基本情况(函数在达到null时应该做什么)。 然后在while循环中执行4行代码,然后调用递归函数。

暂无
暂无

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

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