如果只用if的话 那么if里边必须要立即结束!!保证不经历后边的语句!!!



/*下边这个 逻辑混乱 头结点的话 head先指向了head->next 然后 下边会继续找!!因为只用了if 下边没有用else if!!
*/
struct node * DelNode(struct node*head,int x)
            /*为什么会出错?因为非常没有条理 逻辑混乱!!!!
            每一个分支都不是独立的
            */
{
    if (head==NULL)
        /*1、空链表*/
    {
        printf("空链表,无可删\n");
        exit(0);
    } struct node* p=head;
    struct node* pre=NULL;
    int find=0;
    if (head->data==x)
    {
        printf("找错头\n");
        head=head->next;
        /*3、首节点 */
        free(p);            /*此处删掉之后 应该结束了!不然 后面还会找 对吧 这是一连串的作用啊!!!!*/
        return head;
    } while (p!=NULL)
    {
        if (p->data==x)
        {
            find = 1;
            break;
        }
        pre = p;
        /*pre记录目标节点的前一个 */
        p=p->next;
    } if (find==0) /*2、没有找到的处理*/
    {
        printf("No this data\n");
        exit(0);
    } /* else if (p->next==NULL) 4、尾节点且非首节点 { pre->next=p->next; free(p); } */
    else
    {
        pre->next=p->next;
        free(p);
    } return head;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值