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

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

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

分段头插法进行每k组的翻转,先把剩余的那部分不用翻转的子链表摘出来,然后再将需要翻转的部分分段翻转,最后将摘出来的部分链表连接到已经翻转好的子链表中。

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode reverseKGroup (ListNode head, int k) {
        if (head == null || k == 1){
            return head;
        }

        ListNode p = head;
        int num = 0;

        while (p != null){
            p = p.next;
            num ++;
        }

        if (num < k){
            return head;
        }
        p = head;

        int reverseNum = (num - num % k);
        reverseNum --;
        while (reverseNum != 0){

            reverseNum --;
            p = p.next;
        }

        ListNode withoutRe = p.next;
        p.next = null;
        ListNode newNode = new ListNode(-1);
        ListNode curHead = newNode;
        p = head;
        int count = 0;

        while (p != null){

            if (count > 0 && count % k == 0){
                int c = k;
                while (c != 0){
                    c --;
                    curHead = curHead.next;
                }
            }

            ListNode temp = p;
            p = p.next;
            temp.next = curHead.next;
            curHead.next = temp;
            count ++;
        }
        p = newNode;
        while (p.next != null){
            p = p.next;
        }
        p.next = withoutRe;

        return newNode.next;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 12:23
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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