题解 | #牛牛的链表交换#
牛牛的链表交换
https://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node* next;
}node;
node* creatlist(){
node* headNode = (node*)malloc(sizeof(node));
headNode->next = NULL;
return headNode;
}
node* creatNode(int data){
node* newNode = (node*)malloc(sizeof(node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertNode(node* headNode, int data){
node* newNode = creatNode(data);
while(headNode->next){
headNode = headNode->next;
}
headNode->next = newNode;
newNode->next = NULL;
}
void PrintList(node* headNode){
node* pmove = headNode->next;
while(pmove){
printf("%d ",pmove->data);
pmove = pmove->next;
}
}
void swap(node* headNode){
node* temp;
node* front1 = headNode->next;
node* front2 = headNode->next->next;
node* back1 = NULL;
node* back2 = NULL;
front1->next = front2->next;
front2->next = front1;
headNode->next = front2;
for(temp = headNode;temp->next->next->next != NULL;temp = temp->next);
for(back1 = headNode;back1->next->next != NULL;back1 = back1->next);
for(back2 = headNode;back2->next != NULL;back2 = back2->next);
back1->next = NULL;
back2->next = back1;
temp->next = back2;
}
int main() {
int n,i;
scanf("%d", &n);
int array[] = {0};
int* p = array;
p = (int*)malloc(n*sizeof(int));
node* list = creatlist();
for(i = 0;i<n;i++){
scanf("%d", p+i);
insertNode(list, *(p+i));
}
swap(list);
PrintList(list);
return 0;
}

