题解 | #牛牛的链表添加节点#

牛牛的链表添加节点

https://www.nowcoder.com/practice/e33b79c2e15a41f9b541e73cd256124a

#include <iomanip>
#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;
        }
    }
    //引用m作为插入的位置
    void input(int &m){
        int n;
        cin>>n>>m;
        int *a=new int[n];
        for(int i=0;i<n;i++){
            cin>>a[i];
            //调用尾插函数
            append(a[i]);
        }
    }
    //定义函数插入节点
    void charu(int &m){
        //创建节点遍历链表
        Node* temp=head;
        int i=0;
        //当temp落在插入节点前一个位置时停下
        while(i<m-1&&temp!=nullptr){
            temp=temp->next;
            i++;
        }
        if(temp!=nullptr){
            //创建新节点并将m的值赋给新节点
            Node* newnode=new Node(m);
            //把本来temp指向的下一个给新结点指向
            newnode->next=temp->next;
            //再把新节点被temp指向
            temp->next=newnode;
        }
    }
};
int main() {
    int m;
    Linkedlist l1;
    l1.input(m);
    l1.charu(m);
    l1.printlist();
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 17:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务