链表交换
#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;
}