題目:實作一個算法,删除單向連結清單中間的某個結點,假定你隻能通路該結點。給定帶删除的節點,請執行删除操作,若該節點為尾節點,傳回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;
}
};