->
符号在 C++ 中被称为成员访问运算符(Member Access Operator)。它用于访问类的成员变量或成员函数,特别是在指针的情况下。
具体用法
1. 访问类的成员变量
假设有一个类 ListNode
:
cpp
class ListNode {
public:
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
如果你有一个指向 ListNode
的指针 node
,你可以使用 ->
访问其成员变量:
cpp
ListNode* node = new ListNode(5);
node->val = 10; // 使用 -> 访问并修改 val 成员变量
在这个例子中,node->val
等价于 (*node).val
,但 ->
更简洁和常用。
2. 访问类的成员函数
假设 ListNode
类有一个成员函数 printVal
:
cpp
class ListNode {
public:
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
void printVal() {
std::cout << "Value: " << val << std::endl;
}
};
你可以使用 ->
调用该成员函数:
cpp
ListNode* node = new ListNode(5);
node->printVal(); // 使用 -> 调用 printVal 成员函数
在这个例子中,node->printVal()
等价于 (*node).printVal()
,但 ->
更简洁和常用。
示例代码分析
在你的代码中,->
符号被广泛使用,以下是一些具体的例子:
1. 在 mergeSort
函数中
cpp
ListNode* mergeSort(ListNode *head) {
if (!head || !head->next) return head;
// ...
pre_slow->next = NULL;
// ...
ListNode *l1 = mergeSort(head);
ListNode *l2 = mergeSort(slow);
// ...
}
head->next
用于判断链表中是否有至少两个节点。pre_slow->next = NULL;
用于断开链表,使其分成两部分。
2. 在 merge2SortedLists
函数中
cpp
ListNode* merge2SortedLists(ListNode *l1, ListNode *l2) {
ListNode *head = new ListNode(0), *p = head;
while (l1 && l2) {
if (l1->val <= l2->val) {
p->next = l1;
p = p->next;
l1 = l1->next;
} else {
p->next = l2;
p = p->next;
l2 = l2->next;
}
}
// ...
}
l1->val
和l2->val
用于比较两个链表当前节点的值。p->next = l1
和p->next = l2
用于将较小的节点链接到新链表中。l1 = l1->next
和l2 = l2->next
用于移动指针到下一个节点。
总结
->
符号在 C++ 中用于通过指针访问类的成员变量和成员函数。它在链表操作中尤为常见,因为它简洁且直观。通过使用 ->
,你可以方便地访问和操作链表中的节点及其成员。