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

LeetCode 25 Reverse Nodes in k-Group Add to List 划分list

时间:2017-03-09 20:00:32      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:str   direct   return   dir   pen   pac   odi   package   end   

 
Problem :将一个有序list划分为k个组,并且每个组的元素逆置
 
链表操作 :递归算法 
    每次寻找到该组的尾部,然后进行逆置操作,返回头部,这样每次递归操作之后能够进行下一次的逆置操作。
    链表操作画图比较形象!!!!
对于递归算法:找到共同点,找到程序退出点,注意特殊情况
      本题中,共同点为每组为k个节点,并且每组进行的操作均为逆置操作。
      程序退出点,每次返回逆置后的头部,这样最终结果为头部
特殊情况:该链表中的节点个数不是k的整数倍,最后剩下的不需要进行逆置操作!!
 
参考代码:
package leetcode_50;


/***
 * 
 * @author pengfei_zheng
 * list划分为k组并且逆置
 */
public class Solution25 {
    public class ListNode {
         int val;
         ListNode next;
         ListNode(int x) { val = x; }
     }
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode curr = head;
        int count = 0;
        while (curr != null && count != k) { // find the k+1 node
            curr = curr.next;
            count++;
        }
        if (count == k) { // if k+1 node is found
            curr = reverseKGroup(curr, k); // reverse list with k+1 node as head
            // head - head-pointer to direct part, 
            // curr - head-pointer to reversed part;
            while (count-- > 0) { // reverse current k-group: 
                ListNode tmp = head.next; // tmp - next head in direct part
                head.next = curr; // preappending "direct" head to the reversed list 
                curr = head; // move head of reversed part to a new node
                head = tmp; // move "direct" head to the next node in direct part
            }
            head = curr;
        }
        return head;
    }
}

 

 

LeetCode 25 Reverse Nodes in k-Group Add to List 划分list

标签:str   direct   return   dir   pen   pac   odi   package   end   

原文地址:http://www.cnblogs.com/zpfbuaa/p/6527370.html

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