题解 | #BM2 链表内指定区间反转#

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

思路:借助指针数组

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
 */
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    if (head == NULL || m == n) {
        return head;
    }
    struct ListNode guard, *pGuard = &guard;
    pGuard->next = head;
    struct ListNode * curr = pGuard;
    struct ListNode *pBeforeM = NULL, *pAfterN = NULL;
    int count = 0;
    while (curr->next) {
        count++;
        if (count == m) {
            pBeforeM = curr;
        } else if (count == n) {
            pAfterN = curr->next->next;
            break;
        }
        curr = curr->next;
    }
    struct ListNode * addrs[n-m+1];
    curr = pBeforeM->next;
    for (int i = 0; i < n-m+1; i++) {
        addrs[i] = curr;
        curr = curr->next;
    }
    pBeforeM->next = addrs[n-m];
    for (int i = n-m; i > 0; i--) {
        addrs[i]->next = addrs[i-1];
    }
    addrs[0]->next = pAfterN;
    return guard.next;
}
全部评论

相关推荐

oppo 应用软开 22*15+0.5*12
拿到了ssp完美:真的坎坷,但是你至少拿到这么多offer了!
点赞 评论 收藏
分享
废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务