单链表的存储结构:
typedef struct LinkList{
int data;
LinkList * next;
}
分析:
首先,我们要删除第一个值为x结点的前驱结点,则该链表要包含两个及以上结点才行。 在前面通常都是删除该节点,而这次是删除该节点的前驱结点。
所以不能向以往一样定义两个指针。而应该定义三个指针。
prepre , pre ,p;
思路:
1.定义三个指针prepre = L,pre = prepre->next; p = pre->next;
2.通过while循环,条件为p!=null;
如果p->data != x, 那么三个指针同步后移
3.当循环跳出,如果p != null.则将pre结点删除:prepre ->next = p; free(pre);
4.否则,返回0
C代码实现:
int delx1(LinkList * L,int x){
LinkList * prepre = L,pre = prepre->next,p = pre->next;
while(p!= null){
if(p->data != x){
prepre = pre; //同步后移
pre = p;
p = p->next;
}
}
if(p != null){
prepre->next = p;//删除pre结点(p的前驱)
free(pre);
return 1; //删除成功返回1
}else return 0; //未找到值为x的结点,返回0
}