链表小问题
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Node;
typedef Node *LinkList;
int GetElem(LinkList L,int i,int *e)
{
int j;
LinkList p;
p=L->next;
j=1;
while (p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return 0;
*e=p->data;
return 1;
}
void CreatList(LinkList L,int n)
{
LinkList p;
int i;
int u;
L=(LinkList)malloc(sizeof(Node));
L->next=0;
for (i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
scanf("%d",&u);
p->data=u;
p->next=L->next;
L->next=p;
}
}
int main()
{
LinkList L;
int e;
CreatList(L,5);
GetElem(L,5,&e);
printf("%d",e);
return 0;
}
程序为什么不能执行。。。
[解决办法]
L是一个指针,没初始化就用了。
[解决办法]
void CreatList(LinkList L,int n){LinkList p;int i;int u;L=(LinkList)malloc(sizeof(Node));//应该二级指针吧
[解决办法]
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct Node
5 {
6 int data;
7 struct Node *next;
8 }Node;
9
10 typedef Node *LinkList;
11
12 int GetElem(LinkList L, int i, int *e)
13 {
14 int j;
15 LinkList p;
16 p=L->next;
17 j=1;
18 while(p&&j<i)
19 {
20 p=p->next;
21 j++;
22 }
23 if(!p || j>i) return 0;
24 *e = p->data;
25 return 1;
26 }
27
28 LinkList CreatList(LinkList L, int n) //传回链表的头指针
29 {
30 LinkList p;
31 int i;
32 int u;
33 L=(LinkList)malloc(sizeof(Node)); //给L分配空间,但L不能把值传给main中的L
34 L->next = 0;
35 scanf("%d", &u);
36 L->data = u;
37 printf("L->data = %d\n", L->data);
38 for(i=0; i<n; i++)
39 {
40 p=(LinkList)malloc(sizeof(Node));
41 scanf("%d", &u);
42 p->data = u;
43 p->next = L->next;
44 L->next = p;
45 }
46 return L;
47 }
48
49 int main()
50 {
51 LinkList L;
52 int e;
53 L = CreatList(L, 5); //接受链表指针
54 printf("L->data = %d\n", L->data);
55 GetElem(L, 5, &e);
56 printf("e = %d\n", e);
57 return 0;
58 }
程序没多大的问题,就是没把新建的链表的头指针往回传,还有就是没释放空间,这个我就懒得添加了。。。
[解决办法]
问题在于 CreatList(LinkList L, int n)中的LinkList L这个参数不对,这种传法是值传递。只传递副本。