题解 | #牛牛的链表交换#
牛牛的链表交换
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(); }