题解 | #链表中的节点每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;
    }
}
全部评论

相关推荐

孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务