所以我寫了一個雙向循環鏈表(無序)的代碼,在C中,我遇到了一個問題。我有用於打印出的元素(從頭部起)此代碼:如何打印出雙向循環鏈表?
void ShowListFromHead(List& l){
if(l.head==l.tail){
printf("%d", l.head->value);
return;
}
Element* p;
p=l.head;
while(p->next!= l.head){
printf("%d,", p->value);
p=p->next;}
}
它工作正常除了尾巴,由於while循環工作,直到它到達尾部(直到對 - >下是頭部)。所以,這是我的問題:有沒有辦法顯示整個列表而不排除任何元素?然而,似乎我制定了循環,總是有一個元素被遺漏。使用do/while循環也不起作用。我試着在最後一個元素的循環之後添加一個printf,但它會弄亂代碼中其他函數的功能。我試圖解決這個問題幾天,仍然不知道如何,所以任何幫助,高度讚賞!
編輯我加了deleteHead函數,看來也許問題不是完全在show函數中。
bool deleteHead(List& l, int &oldHead){
if(l.head!=NULL){
oldHead= l.head->value;
Element *p=l.head;
if(l.head->next!=NULL){
l.head=l.head->next;
l.head->prev=l.tail;
l.tail->next=l.head;
delete p;
return true;
}}
else if(l.head==NULL){
return false;
}
}
如何打印尾值混亂的其他功能?打印聲明不應更改列表的內容。 – mstbaum
此代碼不是c代碼,它是C++。在c中沒有引用。 –
@iharob抱歉,感謝編輯:) – Jake