猿问

无论测试数据是多少,输出总为error?

题目:建立一个长度为n的带头结点的单链表,在该表中寻找第i个结点,若找到,则输出“OK!”,否则输出“error!”。处理数据类型为整型。

我的代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}List;

void CreatList(List *&L, int n)//建立链表
{
List *P, *S;
int k = sizeof(List);
L = (List *)malloc(k);
S = L;
for (int i = 0; i < n; i++)
{
P = (List *)malloc(k);
scanf("%d", &P->data);
P->next = S;
P = S;
}
P->next = NULL;
}

void Find(List *&L, int item)//查找函数
{
List *P;
P = L;
int k = 0;
while (P->next != NULL)
{
if (P->data == item)
{
k = 1;
break;
}
P = P->next;
}
if (k == 1)
printf("OK!");
else
printf("error!");
}

int main(void)
{
int n, item;//n为链表节点个数,item为要查找的项
List *L;
scanf("%d", &n);
CreatList(L, n);
scanf("%d", &item);
Find(L, item);
return 0;
}

经检验是Find函数中的while语句没有执行,但我想不通为什么,求大神解答。

牛魔王的故事
浏览 107回答 2
2回答

UYOU

链表创建有问题for循环应该是这样的吧:for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;n;&nbsp;i++){&nbsp;&nbsp;&nbsp;&nbsp;P&nbsp;=&nbsp;(List&nbsp;*)malloc(k);&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&P->data);&nbsp;&nbsp;&nbsp;&nbsp;S->next&nbsp;=&nbsp;P;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;=&nbsp;P;}这样创建出来的链表包含一个不存任何数据的头结点,因此查找也要修改if&nbsp;(P->next->data&nbsp;==&nbsp;item)其余没有什么问题但有一种情况未考虑,输入链表元素个数为0时,创建链表并未对此作出处理,导致语句P->next = NULL;执行时出错,建议添加对n=0情况的处理

呼如林

List *&L这是啥意思?L到底是什么?C中没有类似List *&的类型!
随时随地看视频慕课网APP
我要回答