打印

二级指针问题

[复制链接]
752|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

粉丝