二级指针问题

[复制链接]
1552|2
 楼主| pkat 发表于 2011-12-28 17:52 | 显示全部楼层 |阅读模式
se, AD, nex, ST, TI
两个单链表的类在实现插入节点操作时有所不同
C/C++ code
class IntSetList2 {   //using List
private:    int    n;    struct node {        int val;        node *next;        node(int i, node *p) { val = i; next = p; }    };    node *head, *sentinel;public:    IntSetList2(int maxelements, int maxval)    {    sentinel = head =
new node(maxval, 0);        n =
0;    }    int size() { return n; }    void insert(int t)    // 消除递归1
    {    node *p;        if (head->val == t)            return;        if (head->val > t) {            head =
new node(t, head);            n++;            return;        }        for (p = head; p->next->val < t; p = p->next)            ;        if (p->next->val == t)            return;        p->next =
new node(t, p->next);        n++;    }        void report(int
*v)    {    int j =
0;        for (node *p = head; p != sentinel; p = p->next)            v[j++] = p->val;    }};


第二个
C/C++ code
class IntSetList3 {   //using List
private:    int    n;    struct node {        int val;        node *next;        node(int i, node *p) { val = i; next = p; }    };    node *head, *sentinel;public:    IntSetList3(int maxelements, int maxval)    {    sentinel = head =
new node(maxval, 0);        n =
0;    }    int size() { return n; }    void insert(int t)// 消除递归2
    {    node **p;        for (p =
&head; (*p)->val < t; p =
&((*p)->next))            ;        if ((*p)->val == t)            return;        *p =
new node(t, *p);        n++;    }    void report(int
*v)    {    int j =
0;        for (node *p = head; p != sentinel; p = p->next)            v[j++] = p->val;    }};

请问第二个链表的insert里面为什么要用node **p 二级指针 用一级指针行吗 为什么?
sinadz 发表于 2011-12-28 18:05 | 显示全部楼层
形参传值都是实参的拷贝,所以要想改变地址的值必须要用到二级指针
gxgclg 发表于 2011-12-28 23:37 | 显示全部楼层
楼上的分析很正确
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2726

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部