先用的迭代实现,用了很多引用传参。估计有很多需要优化的后面再说。
递归的实现方法也后面再说。
class Solution
{
public:
ListNode *reverselist(ListNode *&head, int &k, int &i)
{
ListNode *result = head,*pmove=head;
head=head->next;
pmove->next=nullptr;
while (i < k && head != nullptr)
{
pmove=head->next;
head->next = result;
result = head;
head=pmove;
++i;
}
return result;
}
ListNode *reverseKGroup(ListNode *head, int k)
{
ListNode *newhead = head, *tempend = head, *temphead = head;
ListNode *lastend = new ListNode();
if (head == nullptr || head->next == nullptr || k == 1)
return head;
bool flag = false;
while (head != nullptr)
{
int i = 1;
tempend = head;
//反转
temphead = reverselist(head, k,i);
// 如果是终点再反转回来
if (i < k)
{
i=1;
temphead = reverselist(temphead, k,i);
}
if (!flag)
{
newhead = temphead;
flag = true;
}
lastend->next= temphead;
lastend = tempend;
return newhead;
}
};