题目描述
给一个单向链表以及整数N,使得每N个元素为一组进行翻转。要求时间复杂度O(n), 空间复杂度O(1)。
#include <iostream>
struct ListNode
{
int val = 0;
ListNode* next = nullptr;
};
ListNode* newreverse(ListNode* a, ListNode* b);
ListNode* reverseLinkedList(ListNode* head, int n)
{
if (head == nullptr)return nullptr;
ListNode* a = head;
ListNode* b = head;
for (int i = 0; i < n; i++){
if (b == nullptr)
break;
b = b->next;
}
ListNode* newhead = newreverse(a, b);
a->next = reverseLinkedList(b, n);
return newhead;
}
ListNode* newreverse(ListNode* a, ListNode* b)
{
ListNode* pre = nullptr;
ListNode* cur = a;
while (cur != b && cur != nullptr){
ListNode* nxt = cur->next;
cur->next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
int main()
{
ListNode* head = new ListNode;
head->val = 0;
ListNode* p1 = new ListNode;
p1->val = 2;
ListNode* p2 = new ListNode;
p2->val = 4;
ListNode* p3 = new ListNode;
p3->val = 1;
ListNode* p4 = new ListNode;
p4->val = 5;
head->next = p1;
p1->next = p2;
p2->next = p3;
p3->next = p4;
ListNode*head2 = reverseLinkedList(head, 2);
return 0;
}