描述
牛牛尝试把一个长度为 n 的数组转换成链表并把链表前两个节点交换位置和把链表最后两个节点交换位置。
输入描述:
第一行输入一个正整数 n 表示数组的长度
第二行输入 n 个正整数,表示数组中各个元素的值
输出描述:
把数组转换成链表后输出交换位置后的链表
示例1
输入:4
2 3 4 5
输出:3 2 5 4
示例2
输入:3
3 2 1
输出:2 1 3
#include<stdio.h>
#include<stdlib.h>
#define bool char
#define true 1
#define false 0
typedef struct node
{
int data;
struct node* next;
}node, * linklist;
bool InsertLink(linklist l, int* i)
{
node* p, * s;
p = l;
while (p->next != NULL)
{
p = p->next;
}
s = (node*)malloc(sizeof(node));
s->data = i;
p->next = s;
s->next = NULL;
p = s;
return true;
}
bool excnode(linklist l, int i)
{
node* p, * s;
if (i < 2)
return false;
p = l->next;
p->data = p->data + p->next->data;
p->next->data = p->data - p->next->data;
p->data = p->data - p->next->data;
while (p->next != NULL)
{
if (p->next->next == NULL)
{
p->data = p->data + p->next->data;
p->next->data = p->data - p->next->data;
p->data = p->data - p->next->data;
}
p = p->next;
}
return true;
}
void Prin(linklist l)
{
node* p = l;
while (p->next != NULL)
{
p = p->next;
printf("%d ", p->data);
}
}
int main()
{
linklist l;
int n, * arr;
l = (node*)malloc(sizeof(node));
l->next = NULL, l->data = 0;
scanf("%d", &n);
arr = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
InsertLink(l, arr[i]);
}
excnode(l, n);
Prin(l);
return 0;
}