二重リンクリストのスワップ機能を作成する際に問題があります。私は単に値を変更しないでリストを "rewire"したい(これは簡単だろう)。私はback<-p->front
を保持するためにこの一時的なアイテムを作成しようとしました。これで、q =をこの前後に設定できましたが、一時アイテムはpとともに変更されます。一時的なアイテムなしでこれらのアイテムを交換するにはどうすればよいですか、または一時的なアイテムをどうやって動作させるのですか?ここで二重リンクリストのスワップ関数を作成するにはどうすればよいですか?
void DLinkedList::swap(Item *p, Item *q)
{
Item* temp = p;
p->next = q->next;
p->pre = q->pre;
if (p->next != NULL)
p->next->pre = p;
if (q->next != NULL)
q->next->pre = q;
q->next = temp->next;
q->pre = temp->pre;
if (p->pre != NULL)
p->pre->next = p;
if (!q->pre == NULL) {
q->pre->next = q;
}
cout << "- The items " << p->val << " & " << q->val << " were swapped -" << endl;
}
ノードを交換するだけで、あるDLINKedListから別のDLinkedListにリスト全体を交換するのではないのですか?もしそうなら、あなたの質問は誤解を招きます。 – PaulMcKenzie
Paddyの答えがこの問題に対して可能な最良の解決策だと思うので、私は私の答えを削除しました。 –