1.冒号后面跟的是赋值,这种写法是C++的特性。
A( int aa, int bb ):a(aa),b(bb) { } 相当于 A( int aa, int bb ) { a=aa; b=bb; }
2. nullprt和NULL的区别
(来源:C++中NULL和nullptr的区别_nullptr和null区别_csu_zhengzy~的博客-CSDN博客)
c++11版本中添加了nullptr,它的出现是为了解决NULL表示空指针时,在C++中的二义性问题。
2.1 C中的NULL
#defne NULL ((void*)0)
2.2 C++中的NULL
#ifdef _cplusplus
#define NULL 0
#else
#define NULL (void*)0)
#endif
在C++中,NULL其实是0,而不是空指针,不可以将void*类型的指针隐式的转换成其他类型。
2.3 C++中的nullptr
C++中的nullptr是空指针void*。
// 定义单链表节点
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 Soluation {
public:
// 直接在原链表删除
ListNode* removeElement1(ListNode* head, int val) {
// 删除头结点
while (head != NULL && head->val == val) {
ListNode* tmp = head;
head = head->next;
delete tmp;
}
// 删除非头结点
ListNode* cur = head;
while (cur != NULL && cur->next != NULL) {
if (cur->next->val == val) {
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
}
else {
cur = cur->next;
}
}
return head;
}
// 设置虚拟头结点进行删除
ListNode* removeElements2(ListNode* head, int val) {
ListNode* dummyHead = new ListNode(0); // 设置虚拟头结点
dummyHead->next = head;
ListNode* cur = dummyHead;
while (cur->next != NULL) {
if (cur->next->val == val) {
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
}
else {
cur = cur->next;
}
}
head = dummyHead->next;
delete dummyHead;
return head;
}
};