首页 > 代码库 > LeetCode 25 Reverse Nodes in k-Group Add to List 划分list

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

题目链接: https://leetcode.com/problems/reverse-nodes-in-k-group/?tab=Description
 
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