华为机试 HJ48题解 | #从单向链表中删除指定值的节点#

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

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

#include <iostream>
#include <bits/stdc++.h>
#include <list>
using namespace std;

std::list<int>::iterator findByPosVal(std::list<int>& myList, int posVal) {
    std::list<int>::iterator jter;
    for (auto iter = myList.begin(); iter != myList.end(); iter++) {
        if (*iter == posVal) {
            return iter;
        }
    }
    return jter;
}

void insertVal(std::list<int>& myList, int posVal, int val) {
    auto jter = findByPosVal(myList, posVal);
    if (jter != myList.end()) {
        myList.insert(jter, val);
    }
}

void deleteVal(std::list<int>& myList, int val) {
    auto jter = findByPosVal(myList, val);
    if (jter != myList.end()) {
        myList.erase(jter);
    }
}

int main() {
    int n;
    list<int> myList;
    while (cin >> n) { // 注意 while 处理多个 case
        int firstnode;
        cin >> firstnode;
        myList.emplace(myList.begin(), firstnode);
        int val;
        int posVal;
        for (int i = 0; i < n - 1; i++) {
            cin >> val >> posVal;
            insertVal(myList, posVal, val);
        }
        int target;
        cin >> target;
        deleteVal(myList, target);

        if (myList.size() == 0) {
            std::cout << "nullptr" << std::endl;
            return 0;
        }

        reverse(myList.begin(), myList.end());
        for (auto iter = myList.begin(); iter != myList.end(); iter++) {
            std::cout << *iter << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

全部评论

相关推荐

害怕一个人的小黄鸭胖乎乎:笑死了,没有技术大牛,招一堆应届生,不到半年,代码就成屎山了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务