C++学习记录-旧题新做-移除重复节点
·
原题记录链接:
C++解法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeDuplicateNodes(ListNode* head) {
ListNode* ob = head;
while (ob != nullptr) {
ListNode* oc = ob;
while (oc -> next != nullptr) {
if (oc -> next -> val == ob -> val) {
oc -> next = oc -> next -> next;
} else {
oc = oc -> next;
}
}
ob = ob -> next;
}
return head;
}
};
今日C++知识点:
C++与C在链表中的区别在于C++拥有构造函数。
什么是构造函数?
构造函数(Constructor)是:在对象被创建时,自动调用,用来初始化对象的特殊函数。
关键词只有三个:
-
对象被创建时
-
自动调用
-
初始化
在leetcode中定义的链表有三个构造函数:
第 1 个构造函数:无参构造
ListNode() : val(0), next(nullptr) {}
作用
创建一个 “默认节点”
等价理解
ListNode node; node.val = 0; node.next = nullptr;
什么时候会用到?
-
vector<ListNode> v(10); -
new ListNode(); -
某些算法里先占位
第 2 个构造函数:只给值
ListNode(int x) : val(x), next(nullptr) {}
作用
创建一个节点,有值,但后面暂时没人
使用示例
ListNode* n = new ListNode(5);
内存状态:
[val = 5 | next = nullptr]
👉 这是最常用的链表节点构造方式
第 3 个构造函数:值 + next
ListNode(int x, ListNode *next) : val(x), next(next) {}
作用(非常重要)
创建节点时,直接指定它的下一个节点
使用示例
ListNode* n2 = new ListNode(2); ListNode* n1 = new ListNode(1, n2);
链表瞬间成型:
n1 -> n2 -> nullptr
👉 一步到位,省掉 n1->next = n2;
更多推荐


所有评论(0)