我需要制作一个函数,将单链接列表中的第n个元素移动到列表的末尾。我创建了一些执行此操作的代码,但是如果我再次尝试执行此操作,它将只将所选元素移到末尾,但是先前移动的那个会被删除/消失。我的理论是,它实际上不会更改尾参考。所以我现在卡住了!
ComponentAnimation title = hi.getToolbar().getTitleComponent().createStyleAnimation("Title", 200);
for (int i = 0; i < tabs.getTabCount(); i++) {
Component tab = tabs.getTabComponentAt(i);
if (tab instanceof Container) {
hi.getAnimationManager().onTitleScrollAnimation((Container)tab, title);
}
}
我的输入: 1 2 3 4 5
第一次移动第三个元素后:
1 2 4 5 3
第二次移动第三个element(4):
1 2 5 4
但应该是
1 2 5 3 4
答案 0 :(得分:0)
我用自己的实现检查了您的代码。您的函数move()运行正常。但是,您不应在代码的第8行中使用“新”字符(如@molbdnilo和@PaulMakenzie突出显示)。但是它不负责这个问题。您的代码的其他部分有问题。
#include<iostream>
using namespace std;
class List
{
struct Node
{
int number;
Node* next;
};
Node* head;
Node* tail;
public:
List()
{
head = NULL;
tail = NULL;
}
void insert(int num)
{
Node* temp = new Node();
temp->number = num;
temp->next = NULL;
if (head == NULL)
{
head = temp;
tail = temp;
}
else
{
Node* point = head;
while (point->next != NULL)
point = point->next;
point->next = temp;
tail = point->next;
}
}
void display()
{
Node* point = head;
while (point != NULL)
{
cout << point->number << " ";
point = point->next;
}
}
void move(int n)
{
if (head == NULL || head->next == NULL)
{
return;
}
Node *first = head;
Node *temp;
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;
}
};
int main()
{
List a;
a.insert(1);
a.insert(2);
a.insert(3);
a.insert(4);
a.insert(5);
a.move(3);
a.move(3);
a.display();
}