【剑指 offer】(十三)—— 在 O(1) 时间删除链表结点
来源:互联网 发布:程序员上班3天被劝退 编辑:程序博客网 时间:2024/05/29 04:03
struct ListNode{ int val; ListNode* next;};void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted);
一般情况下,我们需要从头开始查找(时间复杂度为
这里需要注意两个问题,如果被删除的节点位于链表的尾部,那么他就没有下一个结点(next == NULL),此时值得从节点开始遍历,找到倒数第二个节点。
如果链表只有一个节点,而我们又要删除链表的头结点(也是尾节点),需要将链表的头结点置为 NULL。
void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){ if (!pListHead || !pToBeDeleted) return; if (pToBeDeleted->next != NULL) { ListNode* pNext = pToBeDeleted->next; pToBeDeleted->val = pNext->val; pToBeDeleted->next = pNext->next; delete pNext; pNext = NULL; } else if (*pListHead == pToBeDeleted) { delete pToBeDeleted; pToBeDeleted = NULL; *pListHead = NULL; } else { ListNode* pNode = *pListHead; while (pNode->next != pToBeDeleted) pNode = pNode->next; pNode->next = NULL; delete pToBeDeleted; pToBeDeleted = NULL; }}
0 0
- 【剑指 offer】(十三)—— 在 O(1) 时间删除链表结点
- 剑指offer—在O(1)时间删除链表结点(18-1)
- 剑指Offer:面试题13——在O(1)时间删除链表结点
- 剑指offer——面试题13:在O(1)时间删除链表结点
- 剑指offer——在O(1)时间删除链表结点
- 【剑指offer】O(1)时间删除链表结点
- 【剑指Offer学习】【面试题13 :在O(1)时间删除链表结点】
- 剑指Offer-13-在O(1)时间删除链表结点
- 剑指offer 面试题13:在O(1)时间删除链表结点(C++版)
- 剑指offer-面试题 13:在 O( 1)时间删除链表结点
- 剑指offer--面试题13:在O(1)时间删除链表结点
- 剑指Offer学习之面试题13 :在O(1)时间删除链表结点
- 《剑指offer》刷题笔记(代码完整性):在O(1)时间删除链表结点
- 剑指Offer笔记—— 数值的整数次方 在O(1)时间删除链表结点
- 《剑指offer》:[2]O(1)时间删除链表结点
- 剑指offer(4)-O(1)时间删除链表结点
- 剑指offer--o(1)时间删除链表结点
- 【剑指offer】链表相关-在o(1)时间删除链表结点13
- 分拆素数和
- Linux命令行:rmdir命令
- 稳定的奇偶数字排序
- Chrome浏览器的密码数据
- LeetCode 217 -Contains Duplicate ( JAVA )
- 【剑指 offer】(十三)—— 在 O(1) 时间删除链表结点
- PHP MVC架构
- UVa 201 Squares 枚举
- BUY LOW, BUY LOWER
- C++实现——求三角形的面积(海伦公式)
- leetcode 11. Container With Most Water
- 动画文件的常用格式
- MySQL--基本内容
- android 开启本地相册选择图片并返回显示