题解 | #牛牛的链表删除#

牛牛的链表删除

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

#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;
        }
    }
    //input函数中使用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 Delete(int m){
        //创建两个节点一个在前一个在后
        Node*temp=head;
        Node*pail=temp->next;
        //当后一个节点不为空时
        while(pail!=nullptr){
            //当后一个节点数据为要删除的数时
            if(pail->data==m){
                //把后一个的下一个赋给前一个的下一个
                temp->next=pail->next;
                //删除后节点
                delete pail;
                return;
            }
            //两个节点同时向后走
            temp=pail;
            pail=pail->next;
            
        }
    }
};
int main() {
    int m;
    Linkedlist l1;
    l1.input(m);
    l1.Delete(m);
    l1.printlist();
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

Aki-Tomoya:窝趣,人家这是先富带动后富,共同富裕了属于是
投递英伟达等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务