天天看點

通路單個節點的删除

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

繼續閱讀