0

私はこのコードを書きました、そして私は私の問題が何であるか知りたいです、もしあなたが私自身のものを書くことを意図した私のコードを修正するのを手伝ってくれるなら、それは私に大いに役立ちます...編集:私はそれをに変更しましたこれで、実行時エラーは発生しませんが、名前を出力するか、ノードが存在するかどうかを確認すると、...

void node_delete(friend *amit) // Deleting a node
{
 friend* temp;
 int flag = 0;
 while (head != NULL) // As long the node isnt the last one
 {
       if (0 == (strcmp(head -> next -> name, amit -> name))) // If the name that the user entered matchs a name in the linked list,
       { // It'll skip it
            temp = head -> next;
             head -> next = head -> next -> next; // Deletes a node from the linked list
             flag = 1;
       }
       if (flag == 1) break;
       head = head -> next; // Going to the next node
}
 free(temp); // Freeing the deleted node
 printf ("%s\n", amit -> name);
}

そして主に:

amit.name = "amit"
amit.age = 16
amit.gender = 'm'
node_delete(&amit);

構造体は次のように定義します。

typedef struct friend // The struct
 {
   char *name; 
   int age;
   char gender; 
   struct friend* next; // A pointer that points to the next node in the linked list
}friend;

どうもありがとう :)

4

3 に答える 3

1

最初の数行に対するコメントは次のとおりです。

 head = amit;
 head -> next = amit;  // same as amit->next = amit;
 amit -> next = NULL;  // same as head->next = null;
 while (head -> next != NULL) // will never do anything since head->next is null
于 2012-05-06T15:16:36.600 に答える
0
void node_delete(char *name)
{
 friend *tmp, **p;

 for (pp = &root; (tmp = *pp) ; pp = &tmp->next) 
 {
     if (strcmp(tmp->name, name)) continue; // No match: walk on
     printf("Deleted %s\n", tmp->name);
     *pp = temp->next;
     free(tmp);
     break;
 }    
}

(リンクリストの先頭へのグローバルルートポインタを想定)次のように呼び出されます。

node_delete("Amit");
于 2012-05-06T15:31:44.877 に答える
0
friend *head = NULL;

...

add(data) {
  friend *next = malloc(sizeof(bla));
  fill(next, data);

  if (head == NULL) 
    head = next; 
  else {
    next->next = head;
    head = next;
  }
}

del(data) {
  if (head) {
    if (your_check(head, data)) {
       to_free = head;
       head = head->next;
       free(to_free);
    } else {
      friend *list = head;
      while (list->next) {
        if (your_check(list->next, data)) {
          to_free = list->next;
          list->next = list->next->next;
          free(to_free);
        }
        list = list->next;
      }
    }
  }
}
于 2012-05-06T21:33:33.387 に答える