单链表输入字符查找目的元素的位置有误

为什么查找元素位置那里输入字符后,直接显示不存在该元素~但其实是存在的;调试查找函数的时候也看不出什么,都是乱码,可以帮忙看看嘛

img

img

img

查找函数写的有问题,初始 j = 1, 然后要查找的元素为 a , a 恰巧是链表第一个元素,while() 里的条件就不满足了,然后判断输出又是 if( j != 1) 。

调试下你怎么输入的,e是什么,目测你scanf(" %c")这里多了空格

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:把两个已按升序排列的数组合并成一个升序数组,要求用函数实现
  • 除此之外, 这篇博客: 单链表按元素查找并插入,若不存在需要查找的元素,则在单链表最后插入中的 代码实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #define FLAG -1    //停止输入的标志
    typedef struct Node
    {
        int data;
        struct Node * next;
    }LNode,*LinkList;
    
    void show_List(LinkList L);
    void CreateLinkList(LinkList L);
    LNode *LocationLinkList(LinkList L,int x);
    void InsertLinkList(LinkList L,int eme,int x);
    
    void main()
    {
        int eme,x;
        LinkList L = (LNode *)malloc(sizeof(LNode));
        printf("创建一个单链表:\n");
        CreateLinkList(L);
        printf("遍历单链表:\n");
        show_List(L);
        printf("输入需要在哪一个元素前插入元素,并且输入要插入的元素:\n");
        scanf("%d%d",&eme,&x);
        printf("按值查找,并插入\n");
        InsertLinkList(L,eme,x);
        show_List(L);
    }
    
    void show_List(LinkList L)
    {
        LinkList p = L->next;
        printf("%d",p->data);
        p = p ->next;
        while(p != NULL)
        {
            printf("->%d",p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    void CreateLinkList(LinkList L)  //尾插法  输出是输入的正序
    {
        LinkList s,r;
        int x;
        scanf("%d",&x);
        r = L;    //没写闪退
        while(x != FLAG)
        {
            s = (LNode *)malloc(sizeof(LNode));
            s->data = x;
            //r->next = s;
            //s->next = r->next;   出错误的原因是r->next中已经是新节点的地址了,
            //再把新节点地址赋值给它的指针域,会导致自己不断的指自己 不断 33333
    
            //不妨先把r->next也就是NULL赋给新节点指针域,再将上一个指向新节点,这样就没问题了!
            //s->next = r->next;   //第一种写法
            r->next = s;
    
            r = s;
            scanf("%d",&x);
        }
        r->next = NULL;//第二种写法  先不管最后一个节点,最后再置为NULL
    }
    
    LNode *LocationLinkList(LinkList L,int eme) //按元素查找
    {
        LinkList p,q;
        q = L;
        p = L->next;
        while(p != NULL && p->data != eme)
        {
            q = p;
            p = p->next;
        }
        return q;
    }
    
    void InsertLinkList(LinkList L,int eme,int x)
    {
        LinkList q,s,r;
        int flag=0;
        r=L;
        while(r)
        {
            q = LocationLinkList(r,eme);
            r=q->next;
    
            //找到了元素ele  在其前面插入
            if(r!=NULL)
            {
                s = (LNode*)malloc(sizeof(LNode));
                s->data = x;
                s->next = q->next;
                q->next = s;
                flag=1;
            }
        }
        if(flag == 0)//说明没有找到相应的元素 应该在尾部插入
        {
    
            s = (LNode*)malloc(sizeof(LNode));
            s->data = x;
            q->next = s;
            s->next = NULL;
        }
    }
    
    
  • 您还可以看一下 黄菊华老师的教你如何编程搭建后台管理系统(网站开发就业技能)课程中的 框架演示小节, 巩固相关知识点