删除链表结点
来源:互联网 发布:matlab 生成网络拓扑 编辑:程序博客网 时间:2024/05/16 23:53
面试题13:
题目:给定单项链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
//链表结点struct ListNode{ int m_nvalue; ListNode* m_pNext;};//创建链表ListNode* CreateListNode(int value){ ListNode *pNode = new ListNode(); pNode->m_nvalue = value; pNode->m_pNext = NULL; return pNode;}//连接链表的两个结点void ConnectListNode(ListNode* pCurrent,ListNode* pNext){ if(pCurrent == NULL) { cout<<"前一个节点为空:"<<endl; exit(1); } else { pCurrent->m_pNext = pNext; }}//打印链表信息void PrintList(ListNode* pHead){ ListNode *pNode = pHead; while(pNode != NULL) { cout<<pNode->m_nvalue <<"->"; pNode = pNode->m_pNext ; } cout<<"nul"<<endl;}//删除链表结点void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted){ if(!pListHead ||!pToBeDeleted) return ; //要删除的结点后面还有结点 if(pToBeDeleted->m_pNext != NULL) { ListNode *pNext = pToBeDeleted->m_pNext ; //将pNext的内容复制到 pToBeDeleted,再将 pToBeDeleted的指针指向pNext的下一个结点 pToBeDeleted->m_nvalue = pNext->m_nvalue ; pToBeDeleted->m_pNext = pNext->m_pNext ; delete pNext; pNext = NULL; } //链表只有一个结点,删除头结点 else if(*pListHead == pToBeDeleted) { delete pToBeDeleted; pToBeDeleted = NULL; *pListHead = NULL; } //链表中有多个结点,删除最后一个尾结点 else { ListNode *pNode = *pListHead; while(pNode->m_pNext !=pToBeDeleted) { pNode = pNode->m_pNext ; } pNode->m_pNext = NULL; delete pToBeDeleted; pToBeDeleted = NULL; }}int main(){ ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ListNode* pNode6 = CreateListNode(6); ListNode* pNode7 = CreateListNode(7); ConnectListNode(pNode1,pNode2); ConnectListNode(pNode2,pNode3); ConnectListNode(pNode3,pNode4); ConnectListNode(pNode4,pNode5); ConnectListNode(pNode5,pNode6); ConnectListNode(pNode6,pNode7); PrintList(pNode1); DeleteNode(&pNode1,pNode3); PrintList(pNode1);}
“`
阅读全文
0 0
- 删除链表结点
- 删除链表结点
- 删除链表结点
- 链表尾部增加结点,打印结点,删除结点
- 链表结点的删除
- 删除链表的结点
- 链表结点的删除
- O(1)时间删除链表结点
- 链表《4》删除链表中的结点
- 删除结点 (双向链表)
- 删除链表中的一个结点
- 删除链表中的一个结点
- O(1)时间删除链表结点
- 单向链表结点删除问题
- 专题:链表结点的删除
- 删除链表的结点---o(1)
- 删除链表中的重复结点
- O(1)时间删除链表结点
- 使用Hadoop的Java API操作HDFS
- usb描述符的简介
- WINDOWS中NEXUS的安装使用【ATCO整理】 2016-06-20 15:52 367人阅读 评论(0) 收藏 举报 分类: 项目管理(11) 版权声明:本文为博主原创文章,未经博主允许
- 指针与地址运算
- JS实现鼠标中心放大图片功能原理及实例演示
- 删除链表结点
- IMX6Q学习笔记———编写LED驱动和测试程序以及相关管脚配置
- 分享一些本人自己收藏实用的Android OpenGL 书籍文档
- MySQL正则表达式
- 在搜索框里加点击事件不好使的解决方法
- Android的armeabi、armeabi-v7a和arm64-v8a
- JFrame中设置窗口图片
- [Leetcode] 355. Design Twitter 解题报告
- Tomcat调优面试题(一)