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

链表内指定区间反转

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

核心思路主要是借助临时头结点,找到需要翻转链表的前驱位置,然后将要翻转链表的节点摘下进行子链表的头部插入即可


struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    if (head == NULL || head->next == NULL || m == n)
        return head;

    //借助临时头结点,可以统一所有的情况进行处理,尤其是翻转的链表从第一个节点开始
    struct ListNode* new_head = (struct ListNode*)malloc(sizeof(struct ListNode));
    new_head->next = head;

    //pre指向翻转子链表的前驱节点
    struct ListNode* pre = new_head;

    for (int i = 1; i < m; ++i) { //寻找头插位置
        pre = pre->next;
    }

    //head指向翻转子链表的首部
    head = pre->next;
    for (int i = m; i < n; ++i) {
//将p节点摘下进行子链表的头部插入
        struct ListNode* p = head->next;
        head->next = p->next;
        p->next = pre->next;
        pre->next = p;
    }
    head = new_head->next;
    free(new_head);
    return head;
}

全部评论

相关推荐

06-25 16:00
武汉大学 Java
工科研究生底薪工资就开3k啊??
机械打工仔:写文章提成的岗位工资低,你怪工科?
点赞 评论 收藏
分享
05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务