链表初始化
int listInit(note **l) //初始化
{
l = (note *)malloc(sizeof(note)*1);
if(NULL == *l)
{
return FAILURE;
}
(*l)->next = NULL;
return SUCCESS;
}
int Insert(note *l)
{
if(l == NULL)
{
return FAILURE;
}
note * p;
for( int i = 0; i < 5; i++)
{
p = (note *)malloc(sizeof(note)*1);
p->data = i + rand() % 10;
p->next = l->next;
l->next = p;
}
return SUCCESS;
}
void print(note *l) // 顺序打印
{
if(l == NULL)
{
return;
}
note *p = l->next;
while(p)
{
printf("%d ", p->data");
p = p->next;
}
printf("\n");
}
初始化的实参需要传指针地址的地址。
链表逆序
int listReverse1(note *l) //链表逆序 方法一:会改变链表的结构 // 打印之后翻转
{
if(l == NULL) //入参判断
{
return FAILURE;
}
note *p = l->next;
l->next = NULL;
while(p != NULL)
{
note *q = p;
p = p->next;
q->next = l->next;
l->next = q;
}
return SUCCESS;
}
void listReverse2(note *l) //链表翻转 方法二:不会改变链表的结构 // 调用就翻转
{
if(l == NULL) // 结束条件
{
return;
}
listReverse2(l->next);
printf("%d ", l->data);
}
#define SUCCESS 10001
#define FAILURE 10002
int main()
{
note *l = NULL;
int ret;
ret = listInit(&l);
if(ret == FAILURE)
{
return 1;
}
ret = Insert(l);
if(ret == FAILURE)
{
return 2;
}
printf("结构不变:\n");
printf("顺序打印:");
listReverse2(l);
printf("\n");
printf("结构变:\n");
listReverse1(l);
printf("顺序打印:");
print(l);
return 0;
}