题解 | #从单向链表中删除指定值的节点#C++哈希map

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

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

#include <iostream>
#include <unordered_map>
using namespace std;

struct ListNode {
    int val;
    ListNode* next;
    ListNode() : val(0), next(nullptr) {};
    ListNode(int v) : val(v), next(nullptr) {}
};

void print(ListNode* dummy) {
    ListNode* p = dummy;
    while (p->next) {
        p = p->next;
        cout << p->val << " ";
    }
    cout << endl;
}

int main() {
    int num; // 链表结点个数
    int head_val; // 头结点值
    cin >> num >> head_val;
    int i_val;
    int pre_val;
    auto dummuy = new ListNode(-1);
    auto head = new ListNode(head_val);
    dummuy->next = head;
    unordered_map<int, ListNode*> m;
    m[-1] = dummuy;
    m[head_val] = head;

    for (int i = 0; i < num - 1; ++i) {
        cin >> i_val >> pre_val;
        auto p = m[pre_val];
        auto newNode = new ListNode(i_val);
        if (p) newNode->next = p->next;
        p->next = newNode;
        m[i_val] = newNode;
    }
    int del_val;
    cin >> del_val;
    auto p = m[del_val];
    if (p == head) {
        dummuy->next = p->next;
    } else if (p->next == nullptr) {
        p = nullptr;
    } else {
        p->val = p->next->val;
        p->next = p->next->next;
    }
    print(dummuy);
    return 0;
}

全部评论

相关推荐

野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务