Leetcode #92. 反转链表 II(c++)递归

Leetcode

92. 反转链表 II

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

自己用迭代的方式写了一次,思路简单,在纸上把图画明白就会了。 记录一下递归方式,递归要我命!好难!

代码学习了题解某大佬的方法。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* N = NULL;  //保存返回节点的下一个值

/*反转链表的前n个节点*/
struct ListNode* Re(struct ListNode* head, int n){
    if(n == 1) {
        N = head->next;
        return head; 
    }
    struct ListNode* last = Re(head->next, n-1);
    head->next->next = head;
    head->next = N;
    return last;
}

struct ListNode* reverseBetween(struct ListNode* head, int m, int n){
    if(m == 1){ 
        return Re(head, n); //返回翻转后的头节点
    }
    head->next = reverseBetween(head->next, m-1, n-1);
    return head;
}

 

你可能感兴趣的:(Leetcode #92. 反转链表 II(c++)递归)