空链表那里显示段错误,如何修改

img

img

img


ElementType FindKth( List L, int K )
{
List p;
int j=1;//j为计数器
if(K<=0)
return ERROR;
p=L;
while(p->Next!=NULL&&j
{
p=p->Next;
j++;
}
if(K==j)
return p->Data;
else
return ERROR;
}

img


题中代码
#include
#include

#define ERROR -1
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrToLNode List;

List Read(); /* 细节在此不表 */

ElementType FindKth( List L, int K );

int main()
{
int N, K;
ElementType X;
List L = Read();
scanf("%d", &N);
while ( N-- ) {
scanf("%d", &K);
X = FindKth(L, K);
if ( X!= ERROR )
printf("%d ", X);
else
printf("NA ");
}
return 0;
}

/* 你的代码将被嵌在这里 */


#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#define N 10
typedef struct Node
{
    int data;
    struct Node* next;
}Node_t;

Node_t* AollcNode(int x)
{
    Node_t* new = (Node_t*)malloc(sizeof(Node_t));//新建一个节点
    //初始化
    new->data = x;
    new->next = NULL;
    return new;
}
//头插入
void InsertNode(Node_t* head, int i)
{
    Node_t* p = AollcNode(i);
    p->next = head->next;
    head->next = p;
}

//打印
void ShowNode(Node_t* head)
{
    Node_t* p = head->next;
    while (p)
    {
        printf("%d->", p->data);
        p = p->next;
    }
    printf("NULL\n");
}

//查找数据
int Finddata(Node_t* head, int k)
{
    Node_t* p = head->next;
    int i = 1;
    while (p)
    {
        if (p->data == k)
        {
            return i;
        }
        i++;
        p = p->next;
    }
    return -1;
}
int main()
{
    Node_t* head = AollcNode(0);//首先要有一个头节点

    printf("头插入...\n");
    for (int i = 1; i < N; i++)//插入节点的个数(传入数据)
    {
        InsertNode(head, i);//头插入
        ShowNode(head);//展示链表
        //Sleep(1000);
    }

    int k = 0;
    printf("请输入:>要查找的数据\n");
    scanf("%d", &k);
    int ret = Finddata(head, k);
    if (ret > 0)
    {
        printf("在第%d处,找到", ret);
    }
    else
    {
        printf("ERROE\n");
    }

    free(head);
    head = NULL;

    return 0;
}

代码修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
#define ERROR -1
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
     ElementType Data;
     PtrToLNode  Next;
};
typedef PtrToLNode List;

List Read(); /* 细节在此不表 */

ElementType FindKth(List L, int K);

int main()
{
    int N, K;
    ElementType X;
    List L = Read();
    scanf("%d", &N);
    while ( N-- ) {
          scanf("%d", &K);
          X = FindKth(L, K);
          if ( X!= ERROR )
              printf("%d ", X);
          else
              printf("NA ");
    }
    system("pause");
    return 0;
}

/*你的代码将被嵌在这里 */
ElementType FindKth( List L, int K)
{
    List p = L;
    int  i = 0;
    if (K <= 0) return ERROR;
    while (p && i < K - 1){
         i++;
         p = p->Next;
    }
    if (!p) return ERROR;
    return  p->Data;
}

img