题解 | #牛牛的链表交换#
牛牛的链表交换
https://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc
#include <stdio.h>
#include <stdlib.h>
//结构体定义
typedef struct Node
{
int num;
struct Node *next;
}LinkNode;
int main(int argc, char const *argv[])
{
int n,i;
scanf("%d", &n);//获取元素个数
LinkNode *head = (LinkNode *)malloc(sizeof(LinkNode));
LinkNode *tail;
head->next = NULL;
scanf("%d", &head->num);
tail = head;
//通过循环创建链表
for (i = 0; i < n-1; ++i)
{
LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));
scanf("%d", &p->num);
p->next = NULL;
tail->next = p;
tail = tail->next;
}
//将tail指向head,为了后续遍历
tail = head;
int count;//计数
LinkNode* p = tail->next;
//交换前两个元素
count = tail->num;
tail->num = p->num;
p->num = count;
tail = p->next;
//交换后两个元素
tail = head;
for(i = 0; i < n-2; i++){
tail = tail->next;
}
p = tail->next;
count = tail->num;
tail->num = p->num;
p->num = count;
tail = p->next;
tail = head;
while(tail!=NULL){
printf("%d ", tail->num);
tail = tail->next;
}
}
#include <stdlib.h>
//结构体定义
typedef struct Node
{
int num;
struct Node *next;
}LinkNode;
int main(int argc, char const *argv[])
{
int n,i;
scanf("%d", &n);//获取元素个数
LinkNode *head = (LinkNode *)malloc(sizeof(LinkNode));
LinkNode *tail;
head->next = NULL;
scanf("%d", &head->num);
tail = head;
//通过循环创建链表
for (i = 0; i < n-1; ++i)
{
LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));
scanf("%d", &p->num);
p->next = NULL;
tail->next = p;
tail = tail->next;
}
//将tail指向head,为了后续遍历
tail = head;
int count;//计数
LinkNode* p = tail->next;
//交换前两个元素
count = tail->num;
tail->num = p->num;
p->num = count;
tail = p->next;
//交换后两个元素
tail = head;
for(i = 0; i < n-2; i++){
tail = tail->next;
}
p = tail->next;
count = tail->num;
tail->num = p->num;
p->num = count;
tail = p->next;
tail = head;
while(tail!=NULL){
printf("%d ", tail->num);
tail = tail->next;
}
}