- C++智能指针
答案:点击链接
- move()函数
- 深拷贝浅拷贝
- 左值和右值的区别
- C++线程,线程框架pthread,线程同步,线程安全
- TIME_WAIT和CLOSE_WAIT状态区别,这两个状态哪一个会泄漏
- 避免死锁的算法
- 编程题:删除单链表中的一个节点,要求时间复杂度为O(1)。参考:点击链接
基本思想:将当前节点的后一个节点的值替换当前节点的值,将当前节点的下一个节点指向后一个节点的后一个节点。
注意:当删除节点是最后一个节点的情况,需要遍历链表,然后找到最后一个节点的前驱。
struct ListNode{
int val;
ListNode *next;
};
void deleteNode(ListNode *head, ListNode *pd){
if(head == NULL || pd == NULL)
return;
if(pd->next != NULL){
p->val = p->next->val;
p->next = p->next->next;
}
else if(head == pd){
head = NULL;
pd = NULL;
}
else{
ListNode *p = head;
while(p->next != pd){
p = p->next;
}
p->next = NULL;
pd = NULL;
}
}