码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]25 Reverse Nodes in k-Group

时间:2015-01-02 16:12:00      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:leetcode

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

标签:leetcode

原文地址:http://7371901.blog.51cto.com/7361901/1598425

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!