から削除することはできません仕事。私は間違って何をしていますか?は、だから私はこの<code>struct</code>を持って単独リンクリスト
答えて
まず、リンクされたリストからノードを削除するロジックを理解してください。 x1-> x2-> x3-> x4というリンクリストがあり、そこからx3を削除したいとします。したがって、x3を削除するには、next
のx2のポインタがx4を指すようにするだけです。しかし、これを行う前に、ノードx3に割り当てられたメモリを解放する必要があります。
ここでこれを実現する簡単なコードである:
void delete(int x) {
struct Book *current;
for(current = start; current; current = current->next) {
if(current->next != NULL){
if(current->next->pages == x) {
Struct Book * temp = current->next; //save the address of the node to be deleted
current->next = current->next->next; //remove the node from the linked list
free(temp->author);
free(...); //whatever memory you want to release
free(temp); //free the memory
break;
}
}
}
}
削除するノードがリストの先頭またはルートノードである場合をカバーしていない上記の実装。
void delete(int x) {
if(start == NULL)
return;
struct Book *current;
if(start->pages == x)
{
Struct Book * temp = start; //save the address of the node to be deleted
start = start->next; //remove the node from the linked list
free(temp->author);
free(...); //whatever memory you want to release
free(temp);
return;
}
for(current = start; current; current = current->next)
{
if(current->next != NULL){
if(current->next->pages == x) {
Struct Book * temp = current->next; //save the address of the node to be deleted
current->next = current->next->next; //remove the node from the linked list
free(temp->author);
free(...); //whatever memory you want to release
free(temp); //free the memory
break;
}
}
}}
あなたはそれがあるとして、あなたはあなたが実際にリストからノードを削除する必要がfree(current)
void delete(int x) {
struct Book *current;
for(current = start; current; current = current->next) {
if(current->next != NULL){
if(current->next->pages == x) {
current->next = current->next->next;
break;
}
}
else if(current->pages == x){
free(current);
current = NULL;
}
}
}
私はそれが単独でリンクされたリストだと思う。また、以前の要素が格納されていない –
あなたは正しいです。彼は自分でそれを保存する必要があります – CIsForCookies
yeah @noob。 OK。 –
を使用し、その後previous->next = current->next;
ともif(current->pages == x)
を必要とするリストを残しています。また、リスト構造からリストノードを削除するメソッドと、実際にそれを削除するメソッドにロジックを分割する方がよいでしょう。
struct Book* unlink(int x, struct Book *root) {
struct Book *current = root, *prev = root, *next = NULL;
while (current) {
if(current->pages == x) {
next = current->next;
if (prev != NULL) {
prev->next = next;
}
return current;
}
prev = current;
current = current->next;
}
return NULL;
}
int delete(int x, struct Book* root) {
struct Book *found = unlink(x, root);
if (found != NULL) {
free(found->title);
free(found->actor);
free(found);
return 0;
}
return -1;
}
- 1. GLib単独リンクリストからのポップ
- 2. Rustの単独リンクリスト
- 3. 変数は、だから私はこのコードを持って
- 4. SQL - クエリは、だから私はこのクエリを持って
- 5. は、だから私はこのデータベースを持っているポスト
- 6. だから私はこの次のコードを持って
- 7. リダイレクトサブドメインのみだから私は、このウェブサイトを持って
- 8. だから私はこのコードを持っているのpython
- 9. 単独リンクリストからインデックス値を取得することはできますか?
- 10. だから私はこのデータベースを持っている
- 11. だから、私はこのコードを持ってBNF
- 12. だから私はこのコードを持って出力PHPファイル
- 13. ループ、だから私はこのコードを持っているラムダ
- 14. C++ - だから私はこのコードを持って
- 15. だから私は、この持っている変化のMySQL
- 16. は、だから私はこの単純な機能を持っている私は、変数
- 17. dev-C++の単独リンクリスト4.9.9.2
- 18. 単独リンクリストの中間ノード
- 19. Cの単独リンクリストC4047
- 20. Qtはだから私はこのような<em>data.txtを</em>どこのデータ持ったファイル
- 21. のRailsアプリはだから私は私のルートでこれを持って
- 22. は<body>は、だから私は、私は<strong>extracthtml.php</strong>でデータを抽出し、そこからURLを持っているjqueryのスクリプト
- 23. だから私は3つのテーブルを持って、私は
- 24. だから、基本的に私はこれ持って
- 25. 単独リンクリスト参照操作
- 26. 単独リンクリスト無限ループ
- 27. はJQuery .beforeは、だから私はこのコードを持っているクロム
- 28. は、だから私は、スキームのこの種を持って新しいもの
- 29. だから私は私のAPIでこれを持っている単純な文字列
- 30. は、だから私はこのコードを持っているのPython
場合の電流>ネクスト>ページ==次に、次>>次=電流 - >ネクスト電流 - X。 –
ヘッドポインタには何も保存しないでください。リストの最初の要素のアドレスを指すポインタ –
@ KishanKumar最後の要素を削除したい場合はどうすればよいですか? – Kidus