克己ovo 2021-09-13 17:47 采纳率: 90%
浏览 26
已结题

按值查找 链表不存在该值 为何无法打印出 不存在语句


#include<stdio.h>
#include<malloc.h>
#define elemType int
//定义数据元素
typedef struct LNode{
    elemType data;            //数据域 
    struct LNode *next;       //指针域 
}LNode,*List;
//头插法创建单链表
List ListHeadInsert(List p){
    List s;
    int x;
    p = (List)malloc(sizeof(LNode)); //创建空结点 
    p->next = NULL;
    printf("请输入数据(以9999结束):\n");
    scanf("%d",&x);
    while(x!=9999){
    s = (List)malloc(sizeof(LNode));
    s->data = x;
    s->next = p->next; 
    p->next=s;
    scanf("%d",&x); 
    }
    return p;
}

//尾插法创建单链表
List TailInsert(List p ){
    //创建头结点 
    p = (List)malloc(sizeof(LNode));
    p->next = NULL;
    int x;
    printf("请输入数据(以9999结束):\n"); 
    scanf("%d",&x);
    List s,t;
    t=p;//t 作为尾指针
    while(x!=9999){
        s = (List)malloc(sizeof(LNode));
        s->data = x;
        t->next = s;
        s->next = NULL;
        t=s;
        scanf("%d",&x);
    }
    t->next=NULL; 
    return p;
}

//按序号查找结点
List Findth(List p,int i){
    int cout = 0;
    List t=p->next;
    int data;
    if(i==0)
    return p;
    while(cout!=i && t){
        data = t->data;
        t = t->next;
        cout++;
    }
    if(t)
    printf("第%d号位上的数据是%d\n",i,data);
    else
    printf("输入序号有误\n"); 
    return p;
} 
//按值查找结点 
List FindK(List p,int data){
    List t = p->next;
    int x = t->data;
    int cout = 1;
    while(t){
        t = t->next;
        x = t->data; 
        cout++;
        if(x==data){
            break;
        }    
    }
    if(t)
    printf("%d所对应的序号是%d\n",data,cout);
    else
    printf("链表中不存在该值\n");
    return p;
} 









//打印单链表
void PrintList(List p){
    List t = p->next;//头结点无数据从第二个结点开始打印 不用p避免修改P的指向 
    if(!t){
        printf("该单链表为空链表"); 
    }
    else{
        while(t){
            printf("%d ",t->data);
            t=t->next;
        }
    }
    printf("\n");
}

int main(){
    List p ;
    p = TailInsert( p );
    //p = ListHeadInsert(p);
    PrintList(p);
    FindK(p,55);
}
 
 
 
 
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-09-13 21:11
    关注

    按值查找节点函数修改如下,供参考:

    //按值查找结点
    
    List FindK(List p,int data){
        List t = p->next;
        int  cout = 0;
        while(t){
            cout++;
            if(t->data == data) break;
            t = t->next;
        }
        if(t)
           printf("%d所对应的序号是%d\n",data,cout);
        else
           printf("链表中不存在该值\n");
        return p;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)