题解 | #牛牛的链表交换#
牛牛的链表交换
https://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc
#include <stdio.h> #include<stdlib.h> typedef struct node { int num; struct node *next; }Node; int main() { int n,i; int tmp; scanf("%d",&n); int dp[n]; for(i=0;i<n;i++) { scanf("%d",dp+i); } Node head; Node *p; p=&head; for(i=0;i<n;i++) { if(0==i) { head.num=dp[i]; head.next=NULL; } else { Node *New=(Node *)malloc(sizeof(Node)); New->num=dp[i]; New->next=NULL; p->next=New; p=p->next; } } /* top作为起始位置 */ /* 交换结点连接关系即可,数据不需要变化 */ Node *top=head.next; p=head.next; head.next=p->next; p->next=&head; Node *last; Node *d; /* 找到到处第三位,该处的下级关系需要变动 */ while(p->next->next->next!=NULL) { p=p->next; } last=p->next->next; d=p->next; p->next=last; p=d; last->next=p; p->next=NULL; while(top!=NULL) { printf("%d ",top->num); top=top->next; } } 可能会稍有复杂,思路 先创建数组 遍历数组创建链表 头和第二个直接交换连接关系 遍历到倒数第三结点 变动链接