// p->next=s->next;
// free(s);
// } // else p=p->next; // }//}
//备注是我的错误代码,没想明白为啥不知报错 后面才想起 是这样的 删错了 我应该是找到要删除值的前一个结点 的时候就进行 s=p->next;
p->next=s->next;
而不是p->data=k的时候这样删除的是下一个
void DeleteList(List L,int a)//此链表假定带头结点,否则还要加一条对第一个结点的操作。LinkNode为定义的链表类型,a为指定的要删除的字符。这题目其实很简单 就是边界问题得判断好,不然很心累,初学者的烦恼。。。。。emmmm { node *p,*q; p=L; while (p->next!=NULL) { if (p->next->data==a) { q=p->next; p->next=p->next->next; free(q); } else p=p->next; } } void rearCreateList(List L,int n) { node *r,*s; r=L; for(int i=0;i<n;i++) { s=(node *)malloc(sizeof(node)); cin>>s->data; r->next=s; r=s; } r->next=NULL; } void printList(List L) { node *s; for(s=L->next;s!=NULL;s=s->next) { cout<<s->data<<" "; } } int main() { List L; init(&L); int n; cin>>n; rearCreateList(L,n); int k; cin>>k; DeleteList(L,k); printList(L); return 0; }