链表逆序

链表初始化

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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值