面试题答案
一键面试#include <mutex>
#include <iostream>
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class ThreadSafeList {
private:
std::mutex listMutex;
public:
void safeInsert(ListNode*& head, int val) {
std::lock_guard<std::mutex> lock(listMutex);
ListNode* newNode = new ListNode(val);
newNode->next = head;
head = newNode;
}
bool safeDelete(ListNode*& head, int val) {
std::lock_guard<std::mutex> lock(listMutex);
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr && curr->val != val) {
prev = curr;
curr = curr->next;
}
if (curr == nullptr) {
return false;
}
if (prev == nullptr) {
head = curr->next;
} else {
prev->next = curr->next;
}
delete curr;
return true;
}
};
你可以这样使用这个类:
int main() {
ListNode* head = nullptr;
ThreadSafeList list;
list.safeInsert(head, 1);
list.safeInsert(head, 2);
std::cout << "Delete 2: " << (list.safeDelete(head, 2)? "Success" : "Failed") << std::endl;
std::cout << "Delete 3: " << (list.safeDelete(head, 3)? "Success" : "Failed") << std::endl;
return 0;
}