訪問單個節點的刪除

題目:實現一個算法,刪除單向鏈表中間的某個結點,假定你只能訪問該結點。給定帶刪除的節點,請執行刪除操作,若該節點爲尾節點,返回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;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章