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

Posted 伊甸一点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 25 Reverse Nodes in k-Group Add to List 划分list相关的知识,希望对你有一定的参考价值。

 
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的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 25:Reverse Nodes in k-Group

LeetCode算法题python解法:25. Reverse Nodes in k-Group

LeetCode 25. Reverse Nodes in k-Group

leetcode25. Reverse Nodes in k-Group

LeetCode 25: Reverse Nodes in k-Group

leetcode 25 Reverse Nodes in k-Group