利用二级指针删除单链表节点
假设有单链表,且其节点定义如下:
struct Node{ Node* next; int val;};
如果要删除该单链表中所有值为val的节点,通常会定义一个prev指针来保存被删除节点的前一节点的信息。
代码如下:
Node* del_node(Node* head, int val){ Node* prev = NULL; Node* trav = head; while(NULL != trav){ if(trav->val == val){ Node* del = trav; if(NULL != prev) prev->next = trav->next; else head = trav->next; trav = trav->next; delete del; } else{ prev = trav; trav = trav->next; } } return head;}
利用二级指针,则可以将代码缩减为:
Node* del_node(Node* head, int val){ Node pp=&head; for(; *pp ; ){ Node* p=*pp; if(p->val == val){ *pp = p->next; delete p; }else pp = &p->next; } return head;}
我们可以通过增加一个中间变量来理解这段代码:
Node* del_node(Node* head, int val){ Node* prev; Node pp; prev = head; pp = &prev; //pp=&head; for(; prev; ){ Node* p=prev; if(p->val == val){ prev = p->next; delete p; // *pp=p->next }else{ prev = p->next; pp = &prev; // pp=&p->next; } } return head;}
可见只是利用二级指针的特性,减少了中间变量prev的使用,从而达到缩减代码的目的。
c++# node, prev, val
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!