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

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

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

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode res;
    public ListNode reverseKGroup (ListNode head, int k) {
        if(k < 2 || head == null || head.next == null) return head;
        // write code here
        recursion(head, k, null);
        return res;
    }
    public void recursion(ListNode head, int k, ListNode thePre) {
        if(head == null) return;
        ListNode p = head, q = head;
        
        int count = 1;
        while(q != null && count != k) {

            q = q.next;
            if(q != null) count++;
        }
        if(count != k) {
            if(thePre == null) {
                res = head;
            }
            return;
        }
        if(thePre != null) thePre.next = null;
        ListNode other = q.next;
        q.next = null;
        ListNode pre = null;
        ListNode cur = p;
        ListNode next = cur.next;
        while(cur != null) {
            cur.next = pre;
            pre = cur;
            cur = next;
            next = next==null?null:next.next;
        }
        p.next = other;
        if(thePre != null) {
            thePre.next = q;
        }else {
            res = q;
        }
        recursion(other, k, p);
    }
}
递归解法,与君共赏
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务