哪里看不懂?我给你写个注释吧。
s = p; // 先用临时变量s记录
while (s->next->next != p) // 查找p的直接前趋结点的前趋结点
s = s->next; // 不是p的直接前趋,则挪动s指针继续向后找
// 当找到p的直接前趋结点的前趋结点后,退出循环,且s指向该前趋结点
//删除结点
q = s->next; // 暂存该前趋结点的下一结点,也就是p的直接前趋结点
s->next = q->next; // 将p赋给p的前趋结点的前趋结点的next,这样p的前趋结点就被删掉了。
// 注: 其实这里直接 s->next = p; 就行了
free(s); // 清除p的前趋结点所占用的空间
追问看不懂
~(>_<)~