私はすでに一意にリンクされた循環リストを作成しましたが、この場合は問題が発生しています。尾を削除したい場合は削除しますノードが尾部として挿入されている場合はそれを挿入し、頭部として挿入した場合は挿入しません。私は、問題はinserthead-inserttail connectionまたはdelete tail機能内にありますが、見つけられません。私はあなたのお手伝いに感謝します。C++二重リンクリスト "tail tail"関数
構造:
struct Element{
int value;
Element *prev, *next;
}。
struct List2W{
Element *tail;
};
コード:
void insertHead(List2W& l, int x){
Element *new_head = new Element;
new_head->value=x;
if(isEmpty(l))
{
new_head->next=new_head;
new_head->prev=new_head;
l.tail=new_head;
}
else
{
new_head->next=l.tail->next;
new_head->prev=l.tail;
l.tail->next=new_head;
}
}
void insertTail(List2W& l, int x){
Element *new_tail = new Element;
new_tail->value=x;
if(isEmpty(l))
{
new_tail->next=new_tail;
new_tail->prev=new_tail;
}
else
{
new_tail->next=l.tail->next;
new_tail->prev=l.tail;
l.tail->next=new_tail;
}
l.tail=new_tail;
}
bool deleteTail(List2W& l, int &value){
if(isEmpty(l))
return false;
else if(l.tail->next==l.tail)
{
value=l.tail->value;
l.tail=NULL;
}
else
{
value=l.tail->value;
(l.tail->prev)->next=l.tail->next;
(l.tail->next)->prev=l.tail->prev;
l.tail=l.tail->prev;
}
return true;}
うわー、あなたも絵を描こうとしました。有難うございます。私はなぜインサートヘッドが不可能だと言っているのか分かりません。私はそこに何か間違いがないとうまくいくようです。 (1)がうまくいかない理由をさらに説明してください。 new_tail-> next = l.tail-> next; //新しい要素の "next"のためにheadを指していた尾部と同じものを割り当てます。このnew_tail-> nextはl.tail-> next(頭部)を指すはずです – NoobProgrammerWannabe
私はそれを得ました。おそらく、私の理解は間違っていたでしょう。 – nariuji
私は私の答えを編集しました。必要に応じてそれを参照してください。 – nariuji