注意: LinkList L 于 LinkList &L 的区别,前者只能改变指针指向的内容,后者同时还可以修改指针本身,即指针内部
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
typedef int Status;
//定义结构体
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
//建立单链表
LinkList CreateList(int n)
{
LinkList L = (LinkList)malloc(sizeof(LinkList)); //建一个头结点并初始链表
L->next = NULL;
int x, i;
LinkList r = L;
printf("input %d value:", n);
for (i = 0; i < n; i++)
{
scanf_s("%d", &x);
LinkList p = (LinkList)malloc(sizeof(LinkList));
p->data = x;
p->next = NULL;
r->next = p;
r = r->next;
}
return L;
}
//查找第i个元素并赋给e
Status GetElem_L(LinkList &L, int i, ElemType &e)
{
LinkList p = L->next;
int j = 1;
while (p&&j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
return 0;
e = p->data;
return 1;
}