题目13:在O(1)时间删除链表结点

来源:互联网 发布:智能电视机软件下载 编辑:程序博客网 时间:2024/06/06 20:36

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该结点。链表定义如下:

#include <iostream>using namespace std;struct ListNode{int m_value;ListNode*m_next;};void DeleteNode(ListNode**pListNode,ListNode*pToDelete){if(!pListNode||!pToDelete)return;//要删除的结点不是尾节点if(pToDelete->m_next!=NULL){ListNode *pNode=pToDelete->m_next;pToDelete->m_value=pNode->m_value;pToDelete->m_next=pNode->m_next;delete pNode;pNode=NULL;}//链表只有一个结点,删除头结点(也是尾节点)else if(*pListNode==pToDelete){delete pToDelete;pToDelete=NULL;*pListNode=NULL;}//删除结点是最后一个结点else{ListNode *pNode=*pListNode;while(pNode->m_next!=pToDelete){pNode=pNode->m_next;}pNode->m_next=NULL;delete pToDelete;pToDelete=NULL;}}


 

0 0