实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。
给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true。
思路:将后续结点复制到当前结点,删除后续结点,相当于删除当前结点。
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Remove {
public:
bool removeNode(ListNode* pNode) {
// write code here
if(pNode==NULL||(pNode!=NULL&&pNode->next==NULL))
return false;
pNode->val=pNode->next->val;
pNode->next=pNode->next->next;
delete pNode->next;
return true;
}
};
带头结点的单链表为空判定条件:pHead->next==NULL;
不带头结点:pHead==NULL;
带头结点的循环链表判定为空:pHead->next==pHead;