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 回答