を持つ必要があります。リスト変数のアドレスが渡された場合は、Node*
の値を変更して、リスト変数を変更することができます。
このようにして、渡されたリスト変数をヌルまたは2番目のノードに設定します。
以下は使用パターンです。
void DeleteNode(Node** list, int data)
{
while (*list != NULL && (*list)->data != data) {
list = &(node->nextnode);
}
if (*list != NULL) {
Node* found = *list;
*list = found->nextnode;
if (found->nextnode != NULL) {
found->nextnode->prevnode = *list;
}
free(found);
}
}
使用法:
Node* list;
...
DeleteNode(&list, ...);
前のノード(prevnode
、二重リンクリスト)が本当に必要ではありません。
while
ループが重要です。リストヘッドから次のノードフィールドのアドレスに別名list
が設定されています。したがって、*list
のその後の変更は、渡されたリスト変数またはいくつかのnextnodeフィールドを変更します。頭を削除
void SortedInsertNode(Node** list, int data)
{
Node* node = (Node*) malloc(sizeof(Node));
node->data = data;
node->prevnode = NULL;
node->nextnode = NULL;
while (*list != NULL && data >= (*list)->data) {
node->prevnode = *list;
list = &(node->nextnode);
}
node->nextnode = *list;
*list = node;
if (node->nextnode != NULL) {
node->nextnode->prevnode = *list;
}
}
:
void DeleteHead(Node** list)
{
if (*list != null) {
Node* dead = *list;
*list = (*list)->nextnode;
(*list)->prevnede = NULL;
free(dead);
}
}
あなたは "動作しない" とはどういう意味ですか? – FKEinternet
頭を連続して削除しようとするとフリーズする – Dimen
変数 'list'に2回目の無効なポインタがあるからです。 – FKEinternet