剑指Offer之 - 在O(1)时间删除链表结点
来源:互联网 发布:企业 大数据战略 编辑:程序博客网 时间:2024/06/01 08:57
题目:
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
思路:
3种情况:1、只有一个结点,且要删除的就是第一个结点???遇到链表时一定要单独考虑只有一个结点的情况
2、要删除的结点不是最后一个结点,这时不需要查找,直接用后面一个结点的值代替前面一个结点,然后删除后一个结点
3、要删除的结点是最后一个结点,这时需要先遍历到倒数第二个结点
代码:
#include<iostream>using namespace std;//功能:O(1)时间内删除链表中的某个结点//3种情况:1、只有一个结点,且要删除的就是第一个结点???遇到链表时一定要单独考虑只有一个结点的情况// 2、要删除的结点不是最后一个结点,这时不需要查找,直接用后面一个结点的值代替前面一个结点,然后删除后一个结点// 3、要删除的结点是最后一个结点,这时需要先遍历到倒数第二个结点struct ListNode{int m_nValue;ListNode *m_pNext;ListNode(){}ListNode(int x):m_nValue(x),m_pNext(NULL){}};void DeleteNode(ListNode *pListHead , ListNode *pToBeDeleted){if(pListHead == NULL || pToBeDeleted == NULL)return;ListNode *q = pToBeDeleted->m_pNext;if(q != NULL)//第二种情况{pToBeDeleted->m_nValue = q->m_nValue;pToBeDeleted->m_pNext = q->m_pNext;delete q;q = NULL;return;}if(pListHead == pToBeDeleted)//第一种情况{delete pToBeDeleted;pToBeDeleted = NULL;pListHead = NULL;return;}ListNode *pre = pListHead;while(pre->m_pNext != pToBeDeleted)//第三种情况{pre = pre->m_pNext;}pre->m_pNext = pToBeDeleted->m_pNext;delete pToBeDeleted;pToBeDeleted = NULL;}int main(){ListNode *head = new ListNode(1);ListNode *p2 = new ListNode(2);ListNode *p3 = new ListNode(3);head->m_pNext = p2;p2->m_pNext = p3;ListNode *p = head;//DeleteNode(p , p);//DeleteNode(p , p2);DeleteNode(p , p3);while(p){cout<<p->m_nValue<<endl;p = p->m_pNext;}}
0 0
- 剑指Offer之 - 在O(1)时间删除链表结点
- 剑指offer之面试题13在O(1)时间删除链表结点
- [剑指offer学习心得]之:在O(1)时间删除链表结点
- 剑指Offer之面试题13:在O(1)时间删除链表结点
- 剑指Offer学习之面试题13 :在O(1)时间删除链表结点
- 《剑指offer》:[2]O(1)时间删除链表结点
- 【剑指offer】O(1)时间删除链表结点
- 剑指offer(4)-O(1)时间删除链表结点
- 剑指offer--o(1)时间删除链表结点
- 剑指offer算法题之单链表的删除结点操作--面试题13:在O(1)时间删除链表结点
- 【剑指offer】链表相关-在o(1)时间删除链表结点13
- 剑指offer—在O(1)时间删除链表结点(18-1)
- [剑指offer][面试题13]在O(1)时间删除链表结点
- 剑指offer(33)-在O(1)时间删除链表结点[数据结构]
- 剑指offer-13:在O(1)时间删除链表结点
- 剑指offer 3.3 代码的完整性3- 在O(1)时间删除链表结点
- 《剑指Offer》面试题13:在O(1)时间删除链表结点
- 【剑指Offer学习】【面试题13 :在O(1)时间删除链表结点】
- StringBuilder和StringBuffer的区别
- Linux-常用命令(1)目录、文件处理命令
- OSDI 2014 paper reading
- CSS技巧杂谈 在css中遇到的各种状况
- Android 对话框
- 剑指Offer之 - 在O(1)时间删除链表结点
- 转载 java中线程队列BlockingQueue的用法
- C++拷贝构造函数和=赋值运算符详解
- 如何使用AndroidStudio进行快速注解开发
- 递归问题篇:
- Android dip(dp) 与 sp的自适应问题
- 黑马程序员--Java之GUI(10)
- java反射机制初步认识<四>注解+反射形成简易IOC
- C++指向虚函数表指针存放位置