有一个长度为奇数的单向链表,要求将后半部分倒序插入前半部分。如:将1->2->3->4->5->6->7 变成 1->7->2->6->3->5->4。不能用额外空间。
struct Node
{
int value;
Node *next;
};
void fun(Node *head, int len)
{
int count = len/2;
Node *tail = head;
while (count)
{
tail = tail->next;
count--;
}
Node *prev = head;
Node *candidate = tail;
while (tail->next != NULL)
{
candidate = tail;
while (candidate->next->next != NULL)
{
candidate = candidate->next;
}
Node *temp = candidate->next;
candidate->next = NULL;
Node *nextPrev = prev->next;
temp->next = prev->next;
prev->next = temp;
prev = nextPrev;
}
}