求助:删除链表头结点的困惑
给出n,删除链表中数据项为n的结点
第一个代码如果头结点数据项为n则会出现错误,其他结点删除正常。
第二个代码运行正常,只是修改了第一个代码增加了一个返回值
对于指针理解不清楚
我对指针的理解是:指针就是地址。
那么同样的代码对指针进行操作,为什么有返回值和没有返回值的结果不同?
void ListDelete(Linklist *l, int n){ if(l == NULL) return ; Linklist *p,*q; p = l->next; q = l; while(p) //从第二个结点开始寻找数据项为n的结点 { if(p->data == n) { q->next = p->next; free(p); p = q->next; } else { q = p; p = p->next; } } if(l->data == n) //删除头结点 { q = l->next; free(l); l = q; }}Linklist* ListDelete(Linklist *l, int n){ if(l == NULL) return ERROR; Linklist *p,*q; p = l->next; q = l; while(p) { if(p->data == n) { q->next = p->next; free(p); p = q->next; } else { q = p; p = p->next; } } if(l->data == n) { q = l->next; free(l); l = q; } return l;}