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

我们尝试用for循环,来搜索链表中的某个元素。在搜到数据的同时能否将其删除呢?
在这里插入图片描述

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

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); 
 } 

猜你喜欢

转载自blog.csdn.net/qq_50748356/article/details/108551894