链表内指定区间反转

⭐️ 题目描述

链表内指定区间反转_第1张图片


OJ链接:链表内指定区间反转

ps:

  1. 第一种情况当 prev 不为空的时候
    链表内指定区间反转_第2张图片

  2. 第二种情况当 prev 为空的时候
    链表内指定区间反转_第3张图片


代码:

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
 */
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    // 区间相等不用处理
    if (m == n) {
        return head;
    }

    struct ListNode* prev = NULL;
    struct ListNode* cur = head;
    int gap = n - m;
    // 先走 m - 1 步
    while (--m) {
        prev = cur;
        cur = cur->next;
    }

    while (gap--) {
        struct ListNode* next = cur->next;  // 记录下一个节点位置
        // 头插
        cur->next = next->next;
        if (prev) {
            next->next = prev->next;
            prev->next = next;
        } else {
            next->next = head;
            head = next;
        }
    }

    return head;
}

你可能感兴趣的:(刷题,链表,学习,刷题)