给你链表的头节点 head
,每 k
个节点一组进行翻转,请你返回修改后的链表。
k
是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k
的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
解:反转链表进阶版,这是每k个反转一次,需要记录反转后的连接。
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
int n = 0;
ListNode * cur = head;
while(cur){
n+=1;
cur=cur->next;
}
ListNode *dumpy = new ListNode(0,head);
ListNode *p =dumpy;
cur = p->next;
ListNode *pre= nullptr;
while(n>=k)
{
n-=k;
for(int i = 0 ; i < k;i++)
{
ListNode * next = cur->next;
cur->next = pre;
pre =cur ;
cur = next;
}
ListNode *next = p->next;
p->next->next=cur;
p->next = pre;
p=next;
}
return dumpy->next;
}
};