我正在使用鏈接列表編寫一個簡單的字典程序。我想搜索詞典中的一個詞並刪除它。我已經編寫了代碼,但我認爲這是更耗時間的,因爲我運行循環兩次,第一次搜索節點並記下位置,第二次刪除它。從鏈接列表中搜索並刪除一個節點
struct node{
char word[20];
char meaning[5][100];
struct node *next;
};
void del(struct node *head, char *word)
{
int found = 0, position = 0, i;
struct node *temp = head;
while(temp != NULL)
{
if(strcmp(temp->word, word) == 0)
{
found = 1;
break;
}
temp = temp->next;
position++;
}
if(found == 1)
{
temp = head;
if(position == 0)
{
head = temp->next;
free(temp);
}
for(i = 0; i < position-1; i++)
temp = temp->next;
struct node *temp2 = temp->next;
temp->next = temp2->next;
free(temp2);
printf("Word deleted..\n");
}
else printf("Word not found!\n");
}
是否有任何替代方法來優化程序?
當您運行搜索循環時,還臨時存儲您正在檢查的當前節點的父節點。找到要刪除的節點時,只需將其父節點的下一個指針設置爲即將刪除的節點,然後刪除該節點。 –
我如何獲得前一個節點地址? – surjit
你需要儘快刪除這個詞,只要你找到它。 –