双链表练习
#include <stdio.h>
#include <stdlib.h>
typedef struct intnode {
int data;
struct intnode* prev;
struct intnode* next;
} node;
void swap(node* ptr1, node* ptr2) {
ptr1->prev->next = ptr2;
if (ptr2->next != NULL) {
ptr2->next->prev = ptr1;//要考虑ptr2->next是否为空
}
ptr1->next = ptr2->next;
ptr2->next = ptr1;
ptr2->prev = ptr1->prev;
ptr1->prev = ptr2;
}
int main() {
int n;
scanf("%d", &n);
int* num = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &num[i]);
}
node* head = (node*)malloc(sizeof(node));
node* tmp = head;
for (int i = 0; i < n; i++) {
node* ptr = (node*)malloc(sizeof(node));
ptr->data = num[i];
ptr->next = NULL;
ptr->prev = tmp;
tmp->next = ptr;
tmp = tmp->next;
}
if (n > 1) {
swap(head->next, head->next->next);
swap(tmp->prev, tmp);
}
tmp = head;
for (int i = 0; i < n; i++) {
tmp = tmp->next;
free(tmp->prev);
tmp->prev = NULL;
printf("%d ", tmp->data);
}
return 0;
}

京公网安备 11010502036488号