单链表逆转的优化算法

逆转单链表的优化算法, 不需要中间数组,来逆转, 直接上代码

#include <stdio.h>

#include <malloc.h>

typedef struct list_node {
    int data;
    struct list_node *next;
} list_node;


list_node *list_create(int elements[], int length) {
    list_node *head = malloc(sizeof(list_node));
    list_node *p = head;
    head->data = elements[0];
    head->next = NULL;

    int i = 1;
    for (; i < length; ++i) {
        list_node *node = malloc(sizeof(list_node));
        node->next = NULL;
        node->data = elements[i];
        p->next = node;
        p = node;
    }
    return head;
}

list_node *list_reverse(list_node *head) {
    list_node *previous, *link, *next_link;
    previous = head;
    link = previous->next;
    next_link = link->next;

    list_node * ret = NULL;
    while (link) {
        link->next = previous;
        previous = link;
        if (!next_link) {
            ret = link;
            break;
        }
        link = next_link;
        next_link = next_link->next;
    }
    head->next = NULL;
    return ret;
}

void list_traverse(list_node *head) {
    list_node *p = head;

    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

int main(int argc, char *argv[]) {
    int elements[] = { 1, 3, 5, 6, 4, 555, 666, 34, 43, 0 };

    list_node *head = list_create(elements, sizeof(elements) / sizeof(elements[0]));
    list_traverse(head);


    head = list_reverse(head);
    list_traverse(head);
    return 0;
}


结果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值