题解 | #链表中的节点每k个一组翻转# 复用上一题的代码,稍加判断即可

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

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

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) {
        int count = 1;
        ListNode tmp = head;
        
        ListNode preNode = new ListNode(-1);
        preNode.next = tmp;
        ListNode retHeadNode = preNode;
        
        while(tmp != null){
            reverse(preNode, tmp, count, k);
            count = 1;
            preNode = tmp;
            tmp = tmp.next;
        }
        return retHeadNode.next;
    }
    
    public static void reverse(ListNode preNode, ListNode tmp, int count, int k){
        ListNode nextNode;
        ListNode next2Node;
        //校验一遍数据是否够用
        int flag = 0;
        ListNode flagNode = tmp;
        while(flagNode != null){
            flag++;
            flagNode = flagNode.next;
        }
        if(flag < k){
            return;
        }
        //从tmp开始k位的部分反转
        while(tmp != null && count < k){
            nextNode = tmp.next;
            if(nextNode == null){
                break;
            }
            next2Node = tmp.next.next;
            ListNode nextTmpNode = preNode.next;
            preNode.next = nextNode;
            nextNode.next = nextTmpNode;
            tmp.next = next2Node;
            count++;
        }
    }
}
全部评论

相关推荐

01-21 12:26
暨南大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务