反转链表
206 反转链表
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr)
{
return head;
}
ListNode* pre=head;
ListNode* tail=head->next;
ListNode* nxt=nullptr;
while(tail!=nullptr)
{
nxt=tail->next;
tail->next=pre;
pre=tail;
tail=nxt;
}
head->next=nullptr;
return pre;
}
};
25 k个一组翻转链表
class Solution {
public:
pair<ListNode*,ListNode*> reverseList(ListNode* head,ListNode* end)
{
ListNode* pre=head;
ListNode* tail=head->next;
ListNode* nxt=nullptr;
while(tail!=end)
{
nxt=tail->next;
tail->next=pre;
pre=tail;
tail=nxt;
}
return {pre,head};
}
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* hNode=new ListNode(-1,head);
ListNode* pre=hNode;
ListNode* tail=hNode;
ListNode* nxt=nullptr;
int cnt=k;
while(tail!=nullptr)
{
while(cnt)
{
tail=tail->next;
cnt--;
if(tail==nullptr)
{
return hNode->next;
}
}
nxt=tail->next;
pair<ListNode*,ListNode*> res=reverseList(pre->next,nxt);
pre->next=res.first;
pre=res.second;
pre->next=nxt;
tail=pre;
cnt=k;
}
return hNode->next;
}
};
|