c学习之单向链表的删除与清除操作

我们尝试用for循环,来搜索链表中的某个元素。在搜到数据的同时能否将其删除呢?
c学习之单向链表的删除与清除操作_第1张图片

链表删除的原理:如图所示,只需将待删除节点的上一个节点指向下一个节点即可(部分代码如下)

scanf("%d",&number);
   Node *p,*q;
 //删除某个元素 
 for(q = NULL,p = list.head;  p  ;  q=p,p = p->next)
 {
     
  if(number == p->value)
  {
     
  
      if(q == NULL)  list.head = p->next; 
      else q->next = p->next;
  free(p);
  break;
  }
 } 

下面是清除操作,只需free每一个节点即可

 //链表清除 
 for(p = list.head;p;p=q)
 {
     
  q = q->next;
  free(p); 
 } 

你可能感兴趣的:(c的学习之路,链表,数据结构,算法,c语言)