所以我一直在使用C代碼(用於類)。鏈表由相互鏈接的結構組成,我試圖通過鏈表讀取鏈表是否有任何鏈接,因此可以將其刪除。但是,如果鏈接在最後,列表中的第一個鏈接將取代它的位置,因此第二個鏈接將成爲第一個鏈接。一個圖是這樣的:如何更改鏈接列表以便刪除最後一個鏈接,並且第一個鏈接取代它?
A-> B-> C-> D-> E和應該成爲B-> C-> D->一
這就是我的工作。我能夠做到這一點,以便中間的任何鏈接都被刪除,但我被困在最後一部分。任何建議都會很棒。
STUDENT *DeleteByLastName(STUDENT *students, char *name)
{
STUDENT *pHead = students;
STUDENT *prev = NULL;
int check;
pHead = pHead->Next;
while(strcmp(pHead->Lastname, name) != 0 && pHead->Next != NULL){
prev = pHead;
pHead = pHead->Next;
}
check = strcmp(pHead->Lastname, name);
if (check == 0){
prev->Next = pHead->Next;
return students;
}
else if (check != 0 && pHead->Next != NULL){
prev = pHead;
pHead = pHead->Next;
check = strcmp(pHead->Lastname, name);
if (check == 0){
pHead = students;
prev->Next = pHead;
pHead->Next = NULL;
students = students->Next;
return students;
}
}
編輯:幫助澄清我的問題。所以我的主要問題是,我試圖將鏈表的末尾循環到第一個元素,並將它分離以製作B-> C-> D-> A格式。我正在考慮添加結構來保存開始位置以及我想要返回的位置。但是這可能會導致我的程序失敗或進入無限循環。
編輯2:代碼的主體提供了,我將編輯功能來幫助完成任務。第一個是掃描每個鏈接,看看是否有人的姓氏,並刪除該鏈接。然後,我將根據我寫的代碼來創建條件,如果名稱不在我想讓它回到起點的任何鏈接中。最後的任務是使A-B-C-D-E變成B-C-D-A。
EDIT3:它應該如何工作的一個例子: Sanka-> Robbert-> Jordan-> Blunc-> Wei->朱 和名稱進行檢查是朱,所以最終名單應該是這樣的: Robbert-> Jordan-> Blunc-> Wei-> Sanka
「我卡住了」。解釋你爲什麼被卡住。你告訴我們你想做什麼,但沒有解釋爲什麼你不能這樣做。以上代碼的狀態是什麼?它做一些你想要的東西嗎?它試圖做什麼,但崩潰?可以...? – kaylum
一種奇怪的要求..旋轉第一個節點的最後一點是什麼? – yano
你有什麼原始的東西可以幫助你?你有「刪除第一」功能嗎? 「刪除最後」功能? '添加在結束功能'?通過這三個「刪除未鏈接節點」功能,您可以輕鬆完成這項工作。那些特殊情況呢?雙鏈表是特殊的;您將以第一個節點爲唯一節點。單鏈表是特殊的;你最終會得到你開始使用的列表,因爲你刪除了尾部,然後將它添加到結果空列表的尾部? –