题目:
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
示例1: 示例2:
热度:5/100
cpp代码:
class Solution {
public:
pair<ListNode*,ListNode*> myReverse(ListNode* head,ListNode* tail){
ListNode* h = head;
ListNode* pre = head;
ListNode* nxt = head->next;
pre->next = nullptr;
while(pre!=tail){
ListNode* temp = nxt->next;
nxt->next = pre;
pre = nxt;
nxt = temp;
}
return {pre,h};
}
ListNode* reverseKGroup(ListNode* head, int k) {
if(k==1) return head;
ListNode* hair = new ListNode(0);
hair->next = head;
ListNode* pre = hair;
while(head){
ListNode* tail = pre;
for(int i=0;i<k;++i){
tail = tail->next;
if(!tail){
return hair->next;
}
}
ListNode* nex = tail->next;
pair<ListNode*,ListNode*> newList = myReverse(head,tail);
pre->next = newList.first;
newList.second->next = nex;
pre = newList.second;
head = nex;
}
return hair->next;
}
};
|