链表的删除

Posted zhengxin909

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的删除相关的知识,希望对你有一定的参考价值。

函数deletelist从以head为头指针的链表中删除成绩低于min_score的学生,并返回结果链表的头指针。

 1 struct stud_node *deletelist( struct stud_node *head, int min_score ) {
 2     //删除成绩低于min_score的学生
 3     struct stud_node *p, *q;
 4     while (head && head->score<min_score) {
 5         q = head;
 6         head = head->next;
 7         free(q);
 8     }
 9     if ( head == NULL ){  //为防止head->next为空, 即只有链表只有一个元素的情况
10         return NULL;
11     } 
12     p = head;
13     q = head->next;
14     while ( q ){  //如果q不是空
15         if ( q->score<min_score ){  //如果q指向的score小于
16             p->next = q->next;  //令p->next(即head->next) = q->next
17             free(q);
18         }
19         else {
20             p = q;  //若没有符合的元素, p指针往后移一位
21         }
22         q = p->next;  //q指针一定位于p->next
23     }
24     return head;
25 }

一样要struct stud_node *p, *q, *head(存放了整个链表的指针);

一开始, 先判断head的元素是不是要找的元素, 如果是, 做一个指针赋值, free掉此元素

如果head不是要找的元素, 让p = head, q = head->next; 由这两个指针操纵位置和删除;

 

照例画图理解会好一点

 

 

以上是关于链表的删除的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--18删除链表的节点

删除链表的倒数第N个节点

Java中双向链表的代码实现

LeetCode 2095. 删除链表的中间节点

LC 删除链表的倒数第N个节点

LeetCode 19. 删除链表的倒数第N个节点