2014-03-26 21 views
-1
struct node{ 
     char * title; 
     char * type; 
     struct node * next; 
    }; 

typedef struct node headPtr; 

headPtr * removeFromFront(headPtr * List){ 
if(List->next==NULL){    
    return NULL; 
} 
else { 
    List=List->next; 
    return List; 
} 
} 

这是我的结构和我的链表功能,用于删除前面的第一个元素,但我不明白为什么它不工作。它不会返回我想要的。链接列表,从前面删除节点?

有人能告诉我我做错了什么吗?

回答

2

代码可以这样简化。

headPtr * removeFromFront(headPtr * List) 
{ 
    if(List == NULL) 
     return NULL; 

    return List->next; 
} 

但是,它看上去都不错,所以有可能在发送方是一个问题

+0

感谢前纠正我。我想知道,这与他的代码实际上不一样。这个可能会更好。在他的代码中,他返回了“List”修改,这是一个局部变量。这不是未定义的行为吗? –

+0

Nop,他返回包含在局部变量中的地址,这是有效的(malloc以同样的方式工作)。如果在函数('int array [10];')中分配了一个数组并且返回了它的地址,那么你是对的,它会变成未定义的行为。 – Taiki

+0

这应该是'if(List == NULL)...'。 –

0
headPtr * removeFromFront(headPtr * List){ 
if(List != NULL && List->next != NULL){    
    headPtr *newHead = List->next; 
    free(List); 
    return newHead; 
} 
return NULL; 
} 
+1

虽然此代码可能会解决问题,但最好包括解释它的作用,以及为什么此解决方案是最适合该问题的解决方案。仅限代码答案会被标记到低质量帖子审阅队列中,并可能被删除。 – MattDMo

+0

请解释此代码的工作原理。这阻止了复制和粘贴,而不理解算法中选择的后果。 OP应该能够决定这个代码是否适合他或她的目的。 – rayryeng

+0

现在有关吗?这个问题是去年3月发布的。如果你想删除它。 –