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

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

https://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 i = 1;
        boolean setHead = false;
        ListNode newHead = head, oldHead = head, curNode = null, lastTail = null, tempNode = null;
        if(head == null || head.next == null || k ==1){//排除特殊情况 图个轻松哈哈 不完美
            return head;
        }
        while(head != null){
            if(i /k > 0){
                curNode = head.next;//cut list and save
                head.next = null;

                tempNode = revert(oldHead);//revert and connect
                oldHead.next = curNode;// first time,only connect next head to tail

                if(lastTail != null){
                    lastTail.next = tempNode;//other time connect head to pre tail in addition
                }
                if(!setHead){//record head of the new listnode to return
                    newHead = tempNode;
                    setHead = true;
                }
                lastTail = oldHead;
                head = curNode;
                oldHead = curNode;
                i = 1;
            }
            if(head != null){
                head = head.next;
                i++;
            }
        }
        return newHead;
    }

    private ListNode revert(ListNode eNode){
        ListNode pre = null, next = null;
        while(eNode != null){
            next = eNode.next;
            eNode.next = pre;
            pre = eNode;
            eNode = next;
        }

        return pre;
    }
}

全部评论

相关推荐

MinJerous:虽然我一直说 计算机不怎么卡学历 但是至少得一本
点赞 评论 收藏
分享
07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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