+ -
当前位置:首页 → 问答吧 → 为什么要用二级指针

为什么要用二级指针

时间:2011-12-26

来源:互联网

两个单链表的类在实现插入节点操作时有所不同
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 二级指针 用一级指针行吗 为什么?
二级指针怎么理解好一点

作者: qfangmiao   发布时间: 2011-12-26

这边没有必要用 指针的指针的吧

一般在函数传递时,需要改变指针的值的时候,采用指针的指针。

作者: relaxisland   发布时间: 2011-12-26