数据结构,实现“查找倒数第m个元素”错误?

#include<stdio.h>

#include<stdlib.h>

typedef int ElemType;

typedef struct Node

{

    ElemType data;


    struct Node *next;

} LNode, *LinkList;


void InitList(LinkList &L) //初始化线性表

{

    L = (LinkList)malloc(sizeof(LNode)); //创建头结点

    L->next = NULL;

    L->data = -1;

}



void Build(LinkList &L)//建立一个带头结点的单链表

{

    int n;

    LinkList p, q;

    p = L;

    printf("请输入数据元素个数n:\n");

    scanf("%d", &n);

    printf("请输入%d个数据元素:\n", n);

    while(n--)

    {

        q = (LinkList)malloc(sizeof(LNode));

        scanf("%d", &q->data);

        q->next = NULL;

        p->next = q;

        p = q;

    }

}

int n = 0;//计数君n

void count(LinkList L, int x)

{

    Node *p;//定义一个指针节点p

    p = L;//将p初值指向链表头节点

    printf("\n请输入要找的元素值x:");

    scanf("%d", &x);//输入需要查找的数

    while(p!= NULL)//用while循环遍历单链表L

    {

        if(p->data == x)

            n++;//正在遍历的数用if语句判断是否等于x,若等于,计数君n+1

        p = p->next;//无论if语句中判断真或假,判断完就可以执行下一个数

    }//(这里的p=p->next不可以在大括号外,否则遍历不能完全执行)

    printf("表中含有%d个%d\n", n, x);//while循环执行完毕可以输出

}

int s=0,j=0;//定义总结点数为s。j记忆第几个节点

void find(LinkList L,int m)

{

Node *p;

p=L;

printf("\n你要查找倒数第几个结点的值?");

scanf("%d",&m);

while(p!=NULL)

{

p=p->next;

s++;

}

while((p->next!=NULL)&&(j<s-m+1))

{

p=p->next;

j++;

}

printf("倒数第%d个元素的值为%d\n",m,p);

 }





int main()

{

    LinkList L;

    InitList(L);

    Build(L);

    count(L,n);

find(L,p);

    return 0;

}



qq_狂乱贵公子_0
浏览 926回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP