2016-03-19 6 views
1

私はすでに一意にリンクされた循環リストを作成しましたが、この場合は問題が発生しています。尾を削除したい場合は削除しますノードが尾部として挿入されている場合はそれを挿入し、頭部として挿入した場合は挿入しません。私は、問題は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;} 

答えて

0

enter image description here

0私inserthead機能がヘッドの前のnew_headとを接続する必要がありますライン、行方不明になったので
+0

うわー、あなたも絵を描こうとしました。有難うございます。私はなぜインサートヘッドが不可能だと言っているのか分かりません。私はそこに何か間違いがないとうまくいくようです。 (1)がうまくいかない理由をさらに説明してください。 new_tail-> next = l.tail-> next; //新しい要素の "next"のためにheadを指していた尾部と同じものを割り当てます。このnew_tail-> nextはl.tail-> next(頭部)を指すはずです – NoobProgrammerWannabe

+0

私はそれを得ました。おそらく、私の理解は間違っていたでしょう。 – nariuji

+0

私は私の答えを編集しました。必要に応じてそれを参照してください。 – nariuji

0

さて、:

else 
    { 
     (l.tail->next)->prev=new_head; // here 
     new_head->next=l.tail->next; 
     new_head->prev=l.tail; 
     l.tail->next=new_head; 
    } 

が@nariujiありがとうを、あなたは私に再analizeその関数作られ、そして、あなたの関心に感謝します。それ以外は、実際にメモリを解放するために実際にテールを削除する必要があり、大丈夫です。

関連する問題