Linus的二级指针思想

来源:互联网 发布:程序员的自我修养mobi 编辑:程序博客网 时间:2024/05/08 16:41
void DelNode(Node head,int num){    Node h = head->next;    Node prev = head;    for (;h->next;) {        printf("prev=%p curr=%p\n",prev->next,h->next);        if (h->num == num) {            prev->next = h->next;            free(h);            break;        }        h=h->next;        prev=prev->next;    }    return ;}

上面的方法是学校里交授的方法,即需要始终保存当前节点的前一个节点,因为删除操作时,你需要前一个节点的next域。但是,Linus认为这样做是不理解指针的做法。

如果开发者能够理解指针,只需要使用“指向该条目的指针”并初始化list_head,然后贯穿列表,此时无需使用任何条件语句即可删除该条目。即使用二级指针。

void DelNode1(Node* head,int num){    Node *curr = head;    for(;*curr;) {        Node rmp = *curr;        printf("curr=%p   *curr=%p   rmp=%p num=%d\n",curr,*curr,rmp,rmp->num);        if (rmp->num == num) {            *curr = rmp->next;            free(rmp);            break;        }        curr=&rmp->next;//二级指针,curr存储的是指向下一个节点的地址,即上一个节点地址    }    return ;}


原创粉丝点击