我对编程很新,我有这个任务,目标是使用这些函数打印出0123456789然后9876543210
thead
所以如果doswap为true,它应该通过我的链表并交换元素,如果它的值小于后面的那个,当我运行程序没有任何事情我的列表不会打印到屏幕
答案 0 :(得分:2)
如果b
是[{1}}和[{1}}的后继者,a
的后继者,则必须a
作为prev
的继承者和b
作为prev
的继任者,以交换a
和b
:
a
要为列表交换连续元素,必须先处理列表的前两个元素。所以列表的其余部分一步一步。如果到达最后一个列表元素的前置者,则终止。
b
请注意,void List::swap( ListElement * prev, ListElement * a, ListElement * b)
{
a->next = b->next; // put successor of b in place of succesor of a
b->next = a; // put a in place of successor of b
prev->next = b; // put b in place of succesor of prev
}
是一项任务。循环bool List::SortSwap()
{
if ( head == nullptr || head->next == nullptr )
return false;
bool anySwapped = false;
// hadle head of list and its successor
if ( head->value < head->next->value )
{
ListElement *temp = head;
head = head->next; // successor of head becomes new head
temp->next = head->next; // successor of old head becomes successor of new head
head->next = temp; // new head becomes succesor of old head
anySwapped = true;
}
// continue until predecessor of tail is found
ListElement *prev = head;
while ( prev->next != nullptr && prev->next->next != nullptr )
{
ListElement *a = prev->next;
ListElement *b = a->next;
if ( a->value < b->value )
{
swap( prev, a, b );
anySwapped = true;
}
prev = prev->next; // step one forward
}
return anySwapped;
}
是无限的。
答案 1 :(得分:1)
假设在交换之前这是当前节点的排列方式:
prev --> a --> b
另外,假设这是交换后节点应该是这样的:
prev --> b --> a
如果以上是交换应该改变的,那么代码 在你的交换函数中需要保存什么节点&#34; b&#34;有下一个 指针:
void List::swap(ListElement * prev, ListElement * a, ListElement * b)
{
ListElement * temp = b->next;
prev->next = b;
b->next = a;
a->next = temp;
}
答案 2 :(得分:0)
所以你要做的是颠倒列表 我做过类似的事。 。
{{1}}