The reverse of the list,
/** * Definition for singly-linked list. * struct ListNode {* int val; * ListNode *next; * ListNode (int x): Val (x), Next (NULL) {} *}; *//** * Definition for singly-linked list. * struct ListNode {* int val; * ListNode *next; * ListNode (int x): Val (x), Next (NULL) {} *}; */class Solution {public:listnode* Reversekgroup (listnode* head, int k) {if (!head | |!head->next | | k <= 1) return head; listnode* Pfirst = head; listnode* Pbefore = NULL; listnode* pkth = Pfirst; while (1) {int cnt = k-1; while (CNT && pkth) {pkth = pkth->next; cnt--; } if (cnt > 0 | | pkth = = NULL) break; Reverse (pbefore,pfirst,pkth); if (Pbefore = = NULL) head = Pfirst; Pbefore = pkth; Pfirst = pkth->next; pkth = Pfirst; } return head; } void Reverse (listnode* pbefore, listnode*& Pfirst, listnode*& pkth) {listnode* p = pfirst;while (P! = pkth) {listnode* tmp = p->next; P->next = pkth->next; Pkth->next = p; p = tmp; } listnode* tmp = Pfirst; Pfirst = pkth; PKTH = tmp; if (pbefore) Pbefore->next = Pfirst; }};
Leetcode:reverse Nodes in K-group