存在单个连接的链表并且给出块大小.例如,如果我的链表是1-> 2-> 3-> 4-> 5-> 6-> 7-> 8 -NULL和我的块大小为4然后反转前4个元素然后反转第4个元素.问题的输出应该是4-> 3-> 2-> 1-> 8-> 7- > 6-→5-NULL
我正在考虑将链表分成大小为4的段,然后将其反转.
但是那样我就不得不使用很多额外的节点了.
空间复杂性应保持在最低限度.
如果有人能够提供更好的解决方案,将额外节点的使用保持在最低限度,那将是非常值得注意的.
最佳答案 我试过这个…似乎工作得很好……
node* reverse(node* head) // function to reverse a list
{
node* new_head = NULL;
while(head != NULL)
{
node* next = head->next;
head->next = new_head;
new_head = head;
head = next;
}
return new_head;
}
node* reverse_by_block(node* head, int block)
{
if(head == NULL)
return head;
node* tmp = head;
node* new_head = head;
node* new_tail = NULL;
int count = block;
while(tmp != NULL && count--)
{
new_tail = tmp;
tmp = tmp->next;
}
new_tail->next = NULL;
new_tail = new_head;
new_head = reverse(new_head);
new_tail->next = reverse_by_block(tmp,block);
return new_head;
}