#include <stdio.h> #include <stdlib.h> //手撕链表 typedef int DateType; typedef struct List { DateType val; struct List* next; }LT; //返回新节点 LT* CreateBayNode(DateType x) { LT* newnode=(LT*)malloc(sizeof(LT)); if(newnode==NULL) { perror("newnode malloc fail"); return NULL; } newnode->next=NULL; newnode->val=x; return newnode; } //尾插 void PushBank(LT** head,DateType x) { //创建要插入的节点 LT* newnode = CreateBayNode(x); //判断头节点是否为NULL if(*head==NULL) { *head=newnode; } else { //进行找尾 LT* cur=*head; LT* tail=*head; while(cur) { tail=cur; cur=cur->next; } //进行连接 tail->next=newnode; } } //打印 void ListPrint(LT* head) { LT* cur=head; while(cur) { printf("%d ",cur->val); cur=cur->next; } } //交换 void Swap(int* p1,int* p2) { int tmp=*p1; *p1=*p2; *p2=tmp; } int main() { int n=0; scanf("%d",&n); int arr[n]; for(int i=0;i<n;i++) { scanf("%d",&arr[i]); } if(n>2) { Swap(&arr[0],&arr[1]); Swap(&arr[n-2],&arr[n-1]); } //开始插入链表 LT* SL=NULL; for(int i=0;i<n;i++) { PushBank(&SL, arr[i]); } //打印链表 ListPrint(SL); return 0; }
先写一个单链表结构,将数组先进行两头交换随后遍历数组将每个元素放进链表中链起来,最后打印即可!