题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

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

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @param k int整型
     * @return ListNode类
     */
    public ListNode reverseKGroup(ListNode head, int k) {
        // 思路:每遍历取出 k 个节点(pre, k个 , curr ),将 k 截断翻转
        ListNode vNode = new ListNode(-1);
        vNode.next = head;

        ListNode pre = vNode;
        ListNode post = pre.next;
        ListNode start;
        ListNode curr;
        int i = 1;
        while (post != null) {
            if (i == k) {
                // 截断待翻转 k 个节点
                start = pre.next;
                pre.next = null;
                curr = post.next;
                post.next = null;
                // 翻转
                reverse(start, post);
                // 拼接并重置 pre,start
                pre.next = post;
                pre = start;
                start.next = curr;
                start = curr;
                // 剩余节点不足 k 组
                if (start == null) {
                    return vNode.next;
                } else {
                    post = start.next;
                    i = 2;
                }
            }
            if (post != null) {
                post = post.next;
                i++;
            } else {
                break;
            }
        }
        return vNode.next;
    }

    public static void reverse(ListNode start, ListNode end) {
        ListNode post = start.next;
        ListNode tmp;
        while (post != null) {
            tmp = post.next;
            post.next = start;
            start = post;
            post = tmp;
        }
    }
}

全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务