函数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; 由这两个指针操纵位置和删除;
照例画图理解会好一点