lc-206


/**
Given the head of a singly linked list, reverse the list, and return the 
reversed list. 

 
 Example 1: 

 
Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]
 

 Example 2: 

 
Input: head = [1,2]
Output: [2,1]
 

 Example 3: 

 
Input: head = []
Output: []
 

 
 Constraints: 

 
 The number of nodes in the list is the range [0, 5000]. 
 -5000 <= Node.val <= 5000 
 

 
 Follow up: A linked list can be reversed either iteratively or recursively. 
Could you implement both? 
 Related Topics递归 | 链表 

 👍 2757, 👎 0 

*/	
//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null) {
            return head;
        }
        Pair<ListNode, ListNode> headTail = reverseInner(head);
        headTail.getValue().next = null;
        return headTail.getKey();
    }

    private Pair<ListNode, ListNode> reverseInner(ListNode node) {
        if (node == null || node.next == null) {
            return new Pair<>(node, node);
        }

        Pair<ListNode, ListNode> headTail = reverseInner(node.next);
        headTail.getValue().next = node;
        return new Pair<>(headTail.getKey(), node);
    }
}
//leetcode submit region end(Prohibit modification and deletion)

文章作者: 倪春恩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 倪春恩 !