您的位置:首页 > 其它

Linus的二级指针思想

2013-01-28 16:16 211 查看
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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: