题解 | #牛牛的链表交换#
牛牛的链表交换
https://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc
牛牛尝试把一个长度为 n 的数组转换成链表并把链表前两个节点交换位置和把链表最后两个节点交换位置。
输入描述:
第一行输入一个正整数 n 表示数组的长度
第二行输入 n 个正整数,表示数组中各个元素的值
输出描述:
把数组转换成链表后输出交换位置后的链表
#include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node *next; struct node *prev; }node; typedef struct list { node *first; node *last; int num; }list; list *creat_list() { list *list=malloc(sizeof(*list)); list->first=NULL; list->last=NULL; list->num=0; return list; } void add_node(list* list,int d) { node *p=(node *)malloc(sizeof(*p)); p->data=d; p->next=NULL; p->prev=NULL; if(list->first==NULL) { list->first=p; list->last=p; list->num++; } else { list->last->next=p; p->prev=list->last; list->last=p; } } void printf_list(list *list) { node *p=list->first; while(p) { printf("%d ",p->data); p=p->next; } } int main() { list *list=creat_list(); int n,d; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&d); add_node(list,d); } //前两个元素互换 node *second=list->first->next; list->first->next=second->next; second->next->prev=list->first; second->next=list->first; second->prev=NULL; list->first->prev=second; list->first=second; //后两个元素互换 node *last_second=list->last->prev; list->last->next=last_second; list->last->prev=last_second->prev; last_second->prev->next=list->last; last_second->next=NULL; last_second->prev=list->last; list->last=last_second; printf_list(list); return 0; }