c - 根据匹配数据删除节点

标签 c linked-list

说明:实现以下函数以按姓氏搜索,然后从链接列表中删除第一个匹配的学生。如果找到匹配的学生,该函数将返回一个指向新链表头部的指针;如果没有找到匹配的学生,则列表不变并返回链表的头。

当编译并运行这段代码时,每次只删除头节点。即使名称位于列表中间或根本不在列表中,头节点也始终会被删除。不太确定出了什么问题。任何帮助将不胜感激!谢谢!

STUDENT *DeleteByLastName(STUDENT *students, char *name)
{
struct STUDENT* current = students;
struct STUDENT* previous = NULL;

while (current != NULL) {
  if (current->Lastname == name) {
     if (previous == NULL) {
        current = current->Next;
        free(students);
        students = current;
     }
     else {
        previous->Next = current->Next;
        free(current);
        current = previous->Next;
     }
  } 
  else {
     previous = current;
     current = current->Next;
  }
  return current;
}    
return NULL;

}

最佳答案

感谢您的提示!这是我为感兴趣的人提供的代码。

STUDENT *DeleteByLastName(STUDENT *students, char *name)
{
struct STUDENT* current;
struct STUDENT* head = students;

current = students;
int count = 0;
struct STUDENT* previous = NULL;

while (current != NULL) {
    //check for matching head and delete
    if (strcmp(current->Lastname,name) == 0 && count == 0) {
        students = current->Next;
        return students;
    }
    //If name matches but is not at the beggining of the list
    if(strcmp(current->Lastname,name) == 0) {
        previous->Next = previous->Next->Next;
        current = current->Next;
        return students;
    }
    else {
        previous = current;
        current = current->Next;
        ++count;
    }
}
return head;
}

关于c - 根据匹配数据删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39132407/

相关文章:

php - 如何在 php 中使用 C modf 函数?

c++ - 有没有一种智能的方法可以在编译时知道要链接到的库的名称? (Linux/库本图)

c++ - 从头到尾遍历(C++ LL Q :1 )

c - 删除链表元素会导致死循环

c - 链表:冒泡排序指针(C)

c - 替换链表中的节点值

c - C 中用于内存管理器的各种长度结构?

c - 为什么控件不进入repeat()函数?

android - 什么是 SLDataLocator_AndroidSimpleBufferQueue (Android 4.3)?

c - 循环的执行速度随变量位置而变化