利用二级指针删除单链表节点

假设有单链表,且其节点定义如下:

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

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部