首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

链表小疑点

2012-10-09 
链表小问题#includestdio.h#includestdlib.htypedef struct Node{int datastruct Node *next}Nodet

链表小问题
#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是一个指针,没初始化就用了。
[解决办法]

C/C++ code
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>

4 typedef struct Node
5 {
6 int data;
7 struct Node *next;
8 }Node;

 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这个参数不对,这种传法是值传递。只传递副本。

热点排行