160. 相交链表 - 力扣(LeetCode)
题解:
cpp
复制代码
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
unordered_set<ListNode*> visited; // ✅ 存指针
// 遍历链表 A,记录所有节点地址
while (headA) {
visited.insert(headA); // ✅ 插入指针
headA = headA->next;
}
// 遍历链表 B,检查是否有节点已在 A 中出现
while (headB) {
if (visited.find(headB) != visited.end()) { // ✅ 查找指针
return headB; // 找到交点
}
headB = headB->next;
}
return nullptr; // C++ 推荐用 nullptr 而非 NULL
}
};
注意
cpp
复制代码
unordered_set<ListNode> unset; // ❌ 编译错误!
unordered_set<ListNode*> unset; // ✅ 存储指针
ListNode 是自定义结构体,没有默认的哈希函数和相等比较函数
- C++ 标准库无法对
ListNode 对象进行哈希或比较
- 会报你之前看到的错误:"call to implicitly-deleted default constructor"