链表交换

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include <vector>

typedef struct node
{
    int value;
    struct node *next;
}node;

node *head = NULL;

int main()
{
    node *n = (node *)malloc(sizeof(node));
    n->next = nullptr;
    n->value = 10;
    n->next = head;
    head = n;

    n = (node *)malloc(sizeof(node));
    n->next = nullptr;
    n->value = 20;
    n->next = head;
    head = n;

    n = (node *)malloc(sizeof(node));
    n->next = nullptr;
    n->value = 30;
    n->next = head;
    head = n;

    n = (node *)malloc(sizeof(node));
    n->next = nullptr;
    n->value = 40;
    n->next = head;
    head = n;

    n = (node *)malloc(sizeof(node));
    n->next = nullptr;
    n->value = 50;
    n->next = head;
    head = n;

    printf("origin \n");
    node *p_head = head;
    while (p_head) {
        printf("%d ", p_head->value);
        p_head = p_head->next;
    }
    printf("\n----------\n");

    // 50 40 30 20 10 ->
    // 40 50 20 30 10
    node *p_new = nullptr;
    {
        node *p_head = head;
        std::vector<node *> vec;
        while (p_head) {
            vec.push_back(p_head);
            p_head = p_head->next;
        }

        int vec_size = vec.size();
        if (vec_size % 2 == 1) {
            vec[vec_size - 1]->next = p_new;
            p_new = vec[vec_size - 1];
          vec_size -= 1;
        }

        for (int i = vec_size - 1; i >= 0; i -= 2) {
            vec[i - 1]->next = p_new;
            p_new = vec[i - 1];

            vec[i]->next = p_new;
            p_new = vec[i];
        }

        printf("swap after\n");
        p_head = p_new;
        while (p_head) {
            printf("%d ", p_head->value);
            p_head = p_head->next;
        }
        printf("\n----------\n");
    }

    p_head = p_new;
    while (p_head) {
        printf("free %d ", p_head->value);
        node *n = p_head;
        p_head = p_head->next;
        free(n);
    }
    printf("\n----------\n");

    return 0;
}