题解 | #牛牛的链表交换#
牛牛的链表交换
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;
}
}
可能会稍有复杂,思路
先创建数组
遍历数组创建链表
头和第二个直接交换连接关系
遍历到倒数第三结点
变动链接

查看12道真题和解析