HJ48 从单向链表中删除指定值的节点

Powered by:NEFU AB-IN

Link

文章目录

  • HJ48 从单向链表中删除指定值的节点
    • 题意
    • 思路
    • 代码

HJ48 从单向链表中删除指定值的节点

  • 题意

    输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。

  • 思路

    单向链表的题,涉及到了 在 指定元素后面插入值删除指定元素
    可以利用 stl 模板类 forward_list

    科普一下:HJ48 从单向链表中删除指定值的节点_第1张图片

  • 代码

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    #define int long long
    #undef int
    
    #define SZ(X) ((int)(X).size())
    #define ALL(X) (X).begin(), (X).end()
    #define IOS                                                                                                            \
        ios::sync_with_stdio(false);                                                                                       \
        cin.tie(nullptr);                                                                                                  \
        cout.tie(nullptr)
    #define DEBUG(X) cout << #X << ": " << X << '\n'
    
    const int N = 30, INF = 0x3f3f3f3f;
    typedef pair<int, int> PII;
    
    
    signed main() {
        // freopen("Tests/input_1.txt", "r", stdin);
        IOS;
    
        int n, head;
        cin >> n >> head; //输入结点数和头结点的值
        forward_list<int> linklist;    //创建一个单向链表
        linklist.push_front(head);    //初始化头结点
        for (int i = 1; i < n; i++) {
            int front, back;
            cin >> back >> front;
            auto it = find(linklist.begin(), linklist.end(), front);
            linklist.insert_after(it, back);    //逐个插入结点
        }
        int last;
        cin >> last;  //输入要删除的结点值
        linklist.remove(last);    //移除具有该值的节点
        for (auto it : linklist) {
            cout << it << " "; //从头到尾输出链表的值
        }
    
    
        return 0;
    }
    

你可能感兴趣的:(Nowcoder,链表,数据结构)