【牛客刷题】反转固定区间链表、每k个节点一组反转

链表内指定区间反转_牛客题霸_牛客网

cpp 复制代码
    ListNode* reverseList(ListNode* head, ListNode* tail) {
        ListNode* pre = nullptr;
        ListNode* cur = head;
        while (cur != tail) { 最后cur就是tail
            ListNode* temp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
    
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        ListNode* dummyNode = new ListNode(0);
        dummyNode->next = head;
        ListNode* pre = dummyNode;
        for (int i = 1; i < m; i++) {
            pre = pre->next;
        }
        ListNode* start = pre->next;
        ListNode* end = pre->next;
        for (int i = m; i <= n; i++) {
            end = end->next;
        }
        
        pre->next = reverseList(start, end);//执行这个函数以后start变成传过去的链表的尾节点,所以直接连接start和end就行
        start->next = end;
        return dummyNode->next;
    }

链表中的节点每k个一组翻转_牛客题霸_牛客网

cpp 复制代码
    ListNode* reverseList(ListNode* head, ListNode* tail) {
        ListNode* pre = nullptr;
        ListNode* cur = head;
        while (cur != tail) {
            ListNode* temp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }

    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here
        if (k == 1 || head->next == nullptr || head == nullptr) return head;

        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* pre = dummy;
        ListNode* start = pre->next;
        ListNode* end = pre;
        while (end->next != nullptr && end != nullptr) {
            start = pre->next;
            end = pre;
            int i;
            for (i = 0; i <= k; i++) {
                if (end->next) end = end->next;
                else {
                    end = nullptr;
                    break;
                }
            }
            if (i < k) break;
            else {
                pre->next = reverseList(start, end);
                start->next = end;
                pre = start;
            }
        }
        return dummy->next;
    }
相关推荐
我命由我123452 小时前
Java NIO 编程 - NIO Echo Server、NIO Client(NIO 异步客户端、NIO Selector 异步客户端)
java·开发语言·网络·java-ee·intellij-idea·intellij idea·nio
嗯、.2 小时前
使用Itext9生成PDF水印,兼容不同生成引擎的坐标系(如: Skia、OpenPDF)
java·pdf·itextpdf·openpdf·坐标变换矩阵
前端炒粉3 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
断剑zou天涯5 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
m***66735 小时前
SQL 实战—递归 SQL:层级结构查询与处理树形数据
java·数据库·sql
骑着猪去兜风.7 小时前
线段树(二)
数据结构·算法
鲸沉梦落7 小时前
Java中的Stream
java
yihuiComeOn7 小时前
[源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅
java·后端·spring
leoufung8 小时前
LeetCode 92 反转链表 II 全流程详解
算法·leetcode·链表
Porunarufu8 小时前
Java·关于List
java·开发语言