单链表的补充(带头结点)

在带头结点的单链表中llist中,p所指结点前面插入值为x的新结点,并返回插入成功与否的标志:

  

int insertPre_link(LinkList llist,PNode p,DataType x){
  PNode q = (DataType*)malloc(sizeof(struct Node));
  PNode r;  //r是p的前驱结点
  if (llist == NULL)  return 0;  
  if (q == NULL){
  printf("OVER");
  return 0;  
  }
  //找前驱结点
  r = llist;
  while(r->link != NULL && r->link != p)  r = r->link;
  if (r == NULL)  printf("NOTFIND P");
  r->info = x;
  //插入结点
  q->link = r->link;
  r->link = q;
  return 1;
}

在带头结点的单链表llist中,删除p所指的结点,并返回删除成功与否的标志:

int deleteP_link(LinkList llist,PNode p){
  //先找前驱结点
  PNode q;
  if (llist == NULL){
    return 0;
  }
  q = llist;
  while(q->link != NULL && q->link != p)  q = p->link;
  if (q == NULL)  return 0;
  q->link = q->link;
  free(p);  //删除结点一定不要忘记释放内存
  return 1;
}

 

posted @ 2021-03-21 15:29  吃心王  阅读(282)  评论(0)    收藏  举报