题目描述:
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。
给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true
题目分析:
对于一个单向链表,如果给出其中一个节点的情况下,想把这个节点删除,删除该节点以后,还希望链表完整的,这个时候我们无法获取当前节点前面一个节点,只能获取其后面一个节点,如果把当前节点删除掉,那么就无法让链表完整,这个时候可以把当前节点后面的元素赋值给当前节点,让当前节点指向后面节点的下一个节点,然后删除后面节点,这样就相当于删除了当前节点。
特别注意:要删除的节点是尾节点时,则无法实现,所以这个要问清楚考官。
程序代码如下:
class Remove {
public:
bool removeNode(ListNode* pNode) {
// write code here
if(pNode==NULL||pNode->next==NULL)
return false;
pNode->val=pNode->next->val;
ListNode* ppNode=pNode->next;
pNode->next=ppNode->next;
delete ppNode;
return true;
}
};