给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 思路: 使用头插法翻转链表。对于由k个结点组成的一个翻转组,用pre指向翻转组首结点的前驱结点,tail指向翻转组的尾结点,用n计数已访问的结点数。 每当找到k个结点,用p指向pre->next,把p之后的结点用头插法放在pre之后,重复k-1次,最后p指向翻转组的尾结点. class Solution { public:ListNode* reverseKGroup(ListNode* head, int k) {ListNode* h = new ListNode(-1);h->next = head;ListNode* pre = h;ListNode* tail = head;int n = 0;while (tail != NULL) {if (++n % k == 0) {ListNode* p = pre->next;for (int i = 0; i < k - 1; i++) {ListNode* q = p->next;p->next = q->next;q->next = pre->next;pre->next = q;}pre = p;tail = p->next;} else {tail = tail->next;}}return h->next;} };