2017-05-30 129 views
0

我从给定链接列表中删除元素有一些问题。这是我得到的:从链接列表中删除元素

void deleteElement(node *list) 
{ 
    node *currP, *prevP = NULL; 

    for (currP = list; currP != NULL; prevP = currP, currP = currP->next) { 

     if(currP->info.name[0] == 'A') { /* Found it. */ 
      if (prevP == NULL) { 
       list = currP->next; 
      } else { 
       prevP->next = currP->next; 
      } 

      free(currP); 
      return; 
     } 
    } 
    printList(list); 
} 

用这种方式写的printList函数打印我的整个列表,它就像没有被删除。有什么错误的想法?

+3

'list = currP-> next;'很重要,因为它对*调用者*没有意义。 list,指针的值就是这样;一个值*。您需要通过地址(指向指针的指针)传递指针,或者使用未使用的返回结果始终返回列表头并相应地使用它。 – WhozCraig

+0

在理解C basic之前,您不应该尝试在C中执行链表。 – Stargateur

回答

0

第一:似乎没有找到删除元素。如果发现return语句会结束该函数,并且printList(list)函数将不会被调用。

第二:使用break跳出for循环而不是return

第三:您的deleteElement()应该返回指向list的指针,表示free的第一个元素。然后,在函数内部列表被设置为新的第一个元素,但是如果你没有返回新的地址,那么你的列表只是一个被释放的元素,当你下次调用元素时可能会导致分段错误。