题解 | #牛牛的链表交换#
牛牛的链表交换
https://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc
#include <iostream>
#include <iostream>
using namespace std;
class Node {//创建节点
public:
int data;
Node* next;//创建指向下一个节点的指针
Node(int val) {
data = val;
next = nullptr;//初始化指针为空
}
};
class Linkedlist {
public:
//创建头节点初始化为空
Node* head;
Linkedlist() {
head = nullptr;
}
//尾插法
void append(int val) {
Node* newnode = new Node(val);
//如果头节点为空,设置新节点为头节点
if (head == nullptr) {
head = newnode;
return;
}
Node* temp = head;//把头节点赋给temp
//遍历找到最后节点
while (temp->next != nullptr) {
//把后一个的指向赋给temp
temp = temp->next;
}
//把新节点链接到末尾
temp->next = newnode;
}
//打印链表
void printlist() {
Node* temp = head;
//遍历链表
while (temp != nullptr) {
cout << temp->data << " ";
//节点向后走
temp = temp->next;
}
}
//用户输入数据
void input() {
int n, m;//前者为输入的数量,后者为输入的数
cin >> n;
for (int i = n; i > 0; i--) {
cin >> m;
append(m);//调用尾插函数
}
}
void tran() {
Node* first = head;//交换第一个和第二个元素
Node* second = head->next;
int i;
i = first->data;
first->data = second->data;
second->data = i;
//创造两个节点,这两个节点相邻
Node* prev = nullptr;
Node* tail = head;
//当tail的后一个节点为最后节点时,将tail赋值给prev,将tail指向最后一个节点
while (tail->next != nullptr) {
prev = tail;
tail = tail->next;
}
//交换
i = prev->data;
prev->data = tail->data;
tail->data = i;
}
};
int main()
{
Linkedlist l;
l.input();
l.tran();
l.printlist();
}

