首页 > 代码库 > [LeetCode]25 Reverse Nodes in k-Group

[LeetCode]25 Reverse Nodes in k-Group

https://oj.leetcode.com/problems/reverse-nodes-in-k-group/

http://fisherlei.blogspot.com/2012/12/leetcode-reverse-nodes-in-k-group.html

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        
        if (head == null || k <= 1)
            return head;
            
        ListNode thehead = head;
        ListNode thetail = head;
        ListNode lasttail = null;
        
        ListNode toReturn = null;
        
        int i = 1;
        while (thetail != null)
        {
            thetail = thetail.next;
            i ++;
            
            if (i == k && thetail != null)
            {
                i = 1;
                HaT hat = reverse(thehead, thetail);
                if (toReturn == null)
                    toReturn = hat.head;
                thehead = hat.tail.next;
                thetail = hat.tail.next;
                if (lasttail != null)
                    lasttail.next = hat.head;
                lasttail = hat.tail;
            }
        }
        
        if (toReturn == null)
            toReturn = head;
        return toReturn;
    }
    
    // Reverse head & tail.pre
    private HaT reverse(ListNode head, ListNode tail)
    {
        // head -> node -> ... -> tail
        ListNode lastnode = head;
        ListNode node = head.next;
        
        while (head != tail)
        {
            ListNode next = node.next;
            lastnode.next = next;
            node.next = head;
            head = node;
            node = next;
        }
        
        return new HaT(head, lastnode);
    }
    
    private static class HaT
    {
        ListNode head;
        ListNode tail;
        HaT(ListNode head, ListNode tail)
        {
            this.head = head;
            this.tail = tail;
        }
    }
}


[LeetCode]25 Reverse Nodes in k-Group