【问题标题】:Deleting a node from a singly linked list C从单链表中删除一个节点 C
【发布时间】:2012-04-13 19:58:47
【问题描述】:

我很难弄清楚为什么我的删除功能不起作用。它是一个布尔值,如果项目被删除,则需要返回。任何帮助将不胜感激

boolean delete(SLL *list, String str){
    NODE *current, *previous,*temp;
    temp=malloc(sizeof(Employee));
    previous=NULL;
    current = list -> head;


    while(current->next!=NULL) {
        if(strcmp(current->anEmployee->name, str) == 0){
            if(current=list->head){
                list->head=current->next;
            }

            if(previous->next == NULL){//item not found in list
                return 0;
            }
        else { //current is to be deleted
            temp->next=current->next;
            previous->next=temp->next;

            return 1;
        }
    }
}

【问题讨论】:

  • if(current=list->head){ 应该是 ==?
  • 还有你的函数内存泄漏,不需要临时变量
  • 提示:开启最高警告级别,像 = vs. == 这样简单的事情就不会再发生了。
  • 如果您使用它们,请始终输入 typedef。最好的情况根本不使用它们,NODE、SLL 没有给我们任何信息(除了使用非标准大写,allcapps 用于宏/常量)。你也没有说明什么不起作用(也许很明显,我并没有真正读过那些烂摊子)。

标签: c linked-list


【解决方案1】:

将 current 与 list->head(最初是列表的根节点)进行比较的 if 语句是将节点分配给 current,而不是进行比较。

【讨论】:

  • 在你的循环中,你推进列表的根节点(即:list->head)而不是当前节点,所以字符串比较只会将 list->head 的名称与一个通过了。关于从链接列表中删除节点的内容,值得您花时间阅读 Sangeeths 链接。
  • 另外,前一个指针设置为NULL——如果传入的字符串不匹配list->head的名字,它应该是segfault。
【解决方案2】:

在编写代码之前,您需要了解在删除链表中的节点时应处理的各种情况。以下内容可能对您有所帮助。

  1. Delete Node from linkedlist

  2. Removing all nodes with a certain value in a linked list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多