二级指针兑现单向链表的插入和删除
二级指针实现单向链表的插入和删除
链表节点结构就用最简单的结构表示吧
struct NODE {
int count;
struct NODE *next
}
struct NODE **node;
怎样利用节点的二级指针来实现单向链表的插入和删除?
譬如说例如知道要在当前节点 current 之前插入一个新节点 new。
current为节点的二级指针,struct NODE **current。
new 为一级指针,struct NODE *new = malloc(sizeof(struct NODE))。
归结来说就是怎么用二级指针current寻找父节点 或 怎样使父节点中的子节点指针指向new?
想了很久没想出来啊....
------解决方案--------------------
node如果是头的话就可以
whie (STRUCT NODE *p=*node; p->next!=NULL && p->next!=*current && ; p=p->next)
大致这样. 如果只有一个节点需要特殊处理
------解决方案--------------------
struct NODE {
int count;
struct NODE *next
}
struct NODE **node;
// 前提是node == &prev_node->next && *node != head
int insert(struct NODE **node, struct NODE *new)
{
if (*node==NULL
------解决方案--------------------
new==NULL)
return -1;
{
struct NODE *prev = (struct NODE *)((char*)node - ((struct NODE *)0)->next);
new->next = prev-next;
prev->next = new;
}
return 0;
}
int delete(struct NODE **node)
{
if (*node==NULL)
return -1;
{
struct NODE *prev = (struct NODE *)((char*)node - ((struct NODE *)0)->next);
prev->next = (*node)->next;
}
return 0;
}
链表节点结构就用最简单的结构表示吧
struct NODE {
int count;
struct NODE *next
}
struct NODE **node;
怎样利用节点的二级指针来实现单向链表的插入和删除?
譬如说例如知道要在当前节点 current 之前插入一个新节点 new。
current为节点的二级指针,struct NODE **current。
new 为一级指针,struct NODE *new = malloc(sizeof(struct NODE))。
归结来说就是怎么用二级指针current寻找父节点 或 怎样使父节点中的子节点指针指向new?
想了很久没想出来啊....
二级指针
单向链表
前插
删除
------解决方案--------------------
node如果是头的话就可以
whie (STRUCT NODE *p=*node; p->next!=NULL && p->next!=*current && ; p=p->next)
大致这样. 如果只有一个节点需要特殊处理
------解决方案--------------------
struct NODE {
int count;
struct NODE *next
}
struct NODE **node;
// 前提是node == &prev_node->next && *node != head
int insert(struct NODE **node, struct NODE *new)
{
if (*node==NULL
------解决方案--------------------
new==NULL)
return -1;
{
struct NODE *prev = (struct NODE *)((char*)node - ((struct NODE *)0)->next);
new->next = prev-next;
prev->next = new;
}
return 0;
}
int delete(struct NODE **node)
{
if (*node==NULL)
return -1;
{
struct NODE *prev = (struct NODE *)((char*)node - ((struct NODE *)0)->next);
prev->next = (*node)->next;
}
return 0;
}