2012-12-07 44 views
2
CAR *removing(int *numberofstructures,CAR *first) 
{ 
    char categorytoerase[51]; 
    CAR *helpnode,*actual; 
    int i; 
    int number_1=0; 
    helpnode=(CAR*)malloc(sizeof(CAR)); 
    actual=(CAR*)malloc(sizeof(CAR)); 
    actual=first; 
    number_1=*numberofstructures; 
    helpnode=NULL; 
    scanf("%s",categorytoerase); 
    for(i=1;i<=number_1;i++) 
    { 
     if (actual->znacka==categorytoerase) 
     { 
      if (helpnode != NULL) { 
       helpnode->next=actual->next; 
       free((void *)actual); 
       actual=helpnode->next; 
      } 
      else 
      { 
       first = actual -> next; 
       free((void *)actual); 
       actual = first; 
      } 
     } 
     else{ 
      helpnode=actual; 
      actual=actual->next; 
     } 
    } 
    return first; 
} 

我想创建一个从链表中删除节点的函数,首先你必须输入字符串。它应该删除那些有汽车类别名称的节点,如输入的字符串。链接列表清除节点

+1

http://stackoverflow.com/questions/69209/deleting-a-middle-node-from-a-single-linked-list-when-pointer-to-the-previous-no,http:// stackoverflow .com/questions/13744946/delete-node-from-linked-list-recursively,http://stackoverflow.com/questions/13656061/delete-node-from-linked-list-with-specific-value –

回答

1

这看起来很像家庭作业....所以本着那种不为你写答案的鸡巴,我会告诉你删除一个节点的想法。

节点包含其数据和指向下一个节点的地址。

所以,既然你知道,你可以创建一个方法......在头

开头且当前节点与前一个节点的引用

为您搜索的列表中需要删除的节点不断循环当前节点变量和先前节点变量 。

当您找到正在查找的节点时,将前一个节点的下一个地址指针 设置为您要删除的节点的下一个地址指针。

祝你好运首席!

0

AMR是对的。如果您有双向链接列表,则删除节点会更容易,因此在结构中为节点包含前一个和下一个指针。基本上,这里的如何删除将在伪发生(你找到后有一个指针到要删除的节点):

IF todelete.prev != NULL THEN 
    todelete.prev.next = todelete.next 
ELSE 
    list.head = todelete.next 
END IF 
IF todelete.next != NULL THEN 
    todelete.next.prev = todelete.prev 
ELSE 
    list.tail = todelete.prev 
END IF 

FREE todelete 

的条件,如果是重要的;否则程序会崩溃,逻辑实际上不起作用 - 你不能很好地替换不存在的东西。