之前学过链表,但是这是第一次写与链表有关的题,我会把比较基础的地方写详细一点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
//ListNode* p创建的是一个结构体指针,指向的是一个结构体, p = p->next访问结构体里的变量next,next里是下一个变量的地址
//p->next,下面的话简单来说,就是p访问结构体里变量的指针,->只能用于对结构体,访问他的成员,访问的对象是结构体里的成员
//具体来说, 表示获取指针 所指向节点的 成员,这个成员本身也是一个指针,通常指向链表中的下一个节点。
//因此,执行 实际上是更新指针 的值,
//使用 nullptr 可以避免在某些情况下出现空指针引起的问题。nullptr是一个空指针,避免null的某些问题
class Solution {
public:
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
unordered_set<ListNode*> s;
for (ListNode* p = headA; p != nullptr; p=p->next)//p=p->next更新p指针指向的链表的节点
{
s.emplace(p);
}
for (ListNode* q=headB; q != nullptr; q=q->next)
{
if(s.find(q)!=s.end())
return q;
}
return nullptr;
}
};
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
这里的链表是用结构体来写的,ListNode* p创建的是结构体指针,p->next是访问结构体里的成员变量,不用像原来那样还要在后面加一个".",next里指向的是下一个节点的指针,p=p->next将下一个节点的地址赋给p指针
ListNode(int x) : val(x), next(NULL) {}
ListNode(int x)
:这是构造函数的声明,它表明构造函数接受一个整数参数 。x
:
:冒号后面的部分称为成员初始化列表,用于在创建对象时初始化成员变量。val(x)
:这行代码表示将传入的参数 赋值给成员变量 。x
val
next(NULL)
:这行代码表示将成员变量 初始化为 ,即空指针,意味着新创建的节点不指向任何其他节点,或者说它是链表的最后一个节点。next
NULL
{}
:这是构造函数的函数体,由于没有额外的初始化工作需要完成,所以函数体是空的。