Мне нужно сделать функцию, которая перемещает n-й элемент в односвязном списке в конец списка.Я создал некоторый код, который делает это, но он работает только один раз, если я пытаюсь сделать это снова, он перемещает выбранный элемент до конца, но тот, который был перемещен ранее, удаляется / исчезает.Моя теория состоит в том, что это фактически не меняет ссылку на хвост.так что я застрял прямо сейчас!
void move(int n)
{
if (head == NULL || head->next == NULL)
{
return;
}
node *first = head;
node *temp =new node;
for (int i = 1; i < n-1; i++)
{
first=first->next;
}
temp = first->next;
first->next=first->next->next;
temp->next = NULL;
tail->next = temp;
tail=temp;
}
мой ввод: 1 2 3 4 5
после перемещения 3-го элемента в первый раз:
1 2 4 5 3
после перемещения 3-го элемента (4) во второй раз:
1 2 5 4
, но должно быть
1 2 5 3 4