題目:實現一個算法,刪除單向鏈表中間的某個結點,假定你只能訪問該結點。給定帶刪除的節點,請執行刪除操作,若該節點爲尾節點,返回false,否則返回true
分析:對於單向鏈表,要刪除一個節點A,只要找到節點A的前驅節點AA,然後修改AA指向下一個節點的值,將其指向A節點的後繼即可,但本題有限制,已知要刪除的節點,又因爲是單鏈表,所以無法獲得其前面一個節點的指針,巧妙的做法是將要刪除節點的後一個節點的值拷貝到要刪除的節點,然後刪除要刪除節點的後一個節點。
/*
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->next==NULL)
return false;
ListNode *t = pNode->next;
pNode->val=t->val;
pNode->next=t->next;
free(t);
return true;
}
};