在链表插入和删除中会用到二级指针,比如removelist(ListNode** phead int value);

   因为删除或者插入操作有时会修改实参的指针(比如头结点为空的时候插入节点,这是就修改了头结点),那么就必须将相应的形参说明为指针的指针,函数调用时将实参指针的地址传递给相应的形参。

typedef struct node{

         DataType data;//节点的数据域

         struct node *next;//节点的指针域

}ListNode;

typedef ListNode *LinkList;

ListNode *p;//p是节点

LinkList head;//head是头指针


例如:刚刚初始化的时候头结点head为空,如果这时插入节点p(由上可知p是ListNode*类型的,是个指针,把它当做地址)时应该是head=p;这就改变了head的地址,所以在传参数的时候,函数的形参一般都是"Insert(LinkList *head,DataType x)",