51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> C >> 文章正文

二级指针实现单向链表的插入和删除代码

更新时间:2013-6-23:  来源:51代码网

二级指针实现单向链表的插入和删除

链表节点结构就用最简单的结构表示吧
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;
}

 

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |