题目
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
解析
只要会对整个链表进行翻转,这题是不难的。
需要注意的是代码中指针tail和cnt的初值,一定要自洽
代码
/*** 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) {ListNode* dummy = new ListNode(0);dummy->next = head;ListNode* pre = dummy;ListNode* tail = dummy->next;int cnt = 1;while (tail) {if (cnt != k) {tail = tail->next;++cnt;} else {ListNode* p = pre->next;tail = tail->next;while (p->next != tail) {ListNode* nxt = p->next;p->next = nxt->next;nxt->next = pre->next;pre->next = nxt;}cnt = 1;pre = p;// delete p;}}ListNode* retNode = dummy->next;delete dummy;return retNode;}};
