60.在O(1)时间内删除链表结点。
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
函数的声明如下:
void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);
分析:这是一道广为流传的Google 面试题,能有效考察我们的编程基本功,还能考察我们
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
函数的声明如下:
void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);
分析:这是一道广为流传的Google 面试题,能有效考察我们的编程基本功,还能考察我们
的反应速度。
/*
60.在O(1)时间内删除链表结点。
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
函数的声明如下:
void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);
分析:这是一道广为流传的Google 面试题,能有效考察我们的编程基本功,还能考察我们
的反应速度,
*/
void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted)
{
if(pToBeDeleted->next==NULL)
{
while(pListHead->next!=pToBeDeleted)
pListHead=pListHead->next;
pListHead->next=NULL;
delete pToBeDeleted;
}
else
{
ListNode* pnext=pToBeDeleted;
pToBeDeleted->data=pnext->data;
pToBeDeleted->next=pnext->next;
delete pnext;
}
}