回 帖 发 新 帖 刷新版面

主题:删除一个表(新手)

下面是2种方法`,到底有什么本质的区别??

void delete( list L )
{
     struct Node * p;
     p = L -> next;

     while( p != NULL){
         free( p );
         p = p -> next;
     }
}



void delete( list L )
{
     struct Node * p;
     struct Node * tmp;
     p = L -> next;

     while( p != NULL){
         tmp = p-> next;
         free ( p ); 
         p = tmp;
     }
}




回复列表 (共4个回复)

沙发

free( p );
  p = p -> next;
第一种方法先释放了p,然后p指向下一个结点,这样是不可以的,释放后,p指针就指向空值了

板凳

free( p );
         p = p -> next;

被free的东西何来的next?

3 楼

第二个可以把删除的点的值返回

4 楼

第一个是实现不了删除一个结点的  原因2 3楼都说了 
第二个利用temp作为临时结点暂存一下p->next的值,这样返回的值就正确了

我来回复

您尚未登录,请登录后再回复。点此登录或注册