【问题标题】:Reverse Linked-List Recursive反向链表递归
【发布时间】:2017-09-19 15:59:28
【问题描述】:

我已经跟踪了我的代码以使用递归来反转链表,但我找不到它有任何问题,但我知道它不起作用。谁能解释一下为什么?

Node reverseLL (Node head) {
  if(curr.next == null) {
    head = curr;
    return head;
  }

  Node curr = head.next;
  prev = head;
  head.next = prev;
  head = next;
  reverseLL(head.next);
}

【问题讨论】:

  • 在声明之前如何使用curr

标签: java recursion linked-list


【解决方案1】:

以下是您的代码的工作版本,添加了一些帮助结构:

class LList {
    Node head;

    void reverse() {
        head = rev(head, head.next);
    }

    private Node rev(Node node, Node next) {
        if(next == null)    return node; //return the node as head, if it hasn't got a next pointer.
        if(node == this.head)   node.next = null; //set the pointer of current head to null.

        Node temp = next.next;
        next.next = node; //reverse the pointer of node and next.
        return rev(next, temp); //reverse pointer of next node and its next.
    }
}

class Node {
    int val;
    Node next;
    public Node(int val, Node next) {
        this.val = val;
        this.next = next;
    }
}

【讨论】:

    【解决方案2】:

    切换前需要调用reverseLL(head.next),向下遍历列表,从最后一个节点开始向上。不过,这需要进行更多更改。

    【讨论】:

      【解决方案3】:

      有两种可能的实现方式。

      第一个带有指向类中head(类属性)的指针

      class Solution:
      head: Optional[ListNode]
          
      def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
          node = head
          
          if node == None:
              return node
          
          if node.next == None:
              self.head = node
              return
          
          
          self.reverseList(node.next)
          q = node.next
          q.next = node
          node.next = None
      
          return self.head
          
      

      第二种解决方案,不依赖类属性来保存head,一旦你找到它。它通过递归调用堆栈返回指向head的指针

      def reverseList(head):
        # Empty list is always None
        if not head:
          return None
      
        # List of length 1 is already reversed
        if not head.next:
          return head
      
      
        next = head.next
        head.next = None
        rest = reverseList(next)
        next.next = head
      
        return rest
      

      【讨论】:

        猜你喜欢
        • 2011-12-19
        • 2013-03-04
        • 1970-01-01
        • 2016-08-01
        • 2021-11-30
        • 1970-01-01
        相关资源
        最近更新 更多