题解 | #牛牛的链表交换#

牛牛的链表交换

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();
}


全部评论

相关推荐

01-23 19:12
门头沟学院 Java
榨出爱国基因:你还差 0.1% 就拿到校招礼盒,快叫朋友给你砍一刀吧
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务