237. 刪除鏈表中的節(jié)點(diǎn)
請(qǐng)編寫(xiě)一個(gè)函數(shù)蜻牢,使其可以刪除某個(gè)鏈表中給定的(非末尾的)節(jié)點(diǎn),您將只被給予要求被刪除的節(jié)點(diǎn)缀磕。
比如:假設(shè)該鏈表為?1 -> 2 -> 3 -> 4 ?落君,給定您的為該鏈表中值為?3?的第三個(gè)節(jié)點(diǎn),那么在調(diào)用了您的函數(shù)之后茧吊,該鏈表則應(yīng)變成?1 -> 2 -> 4?贞岭。
/**
* Definition for singly-linked list.
* struct ListNode {
*? ? int val;
*? ? ListNode *next;
*? ? ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
? ? void deleteNode(ListNode* node) {
? ? ? ? node->val=node->next->val;
? ? ? ? ListNode* p=node->next;
? ? ? ? node->next=node->next->next;
? ? ? ? delete(p);
? ? }
};
主要思路:鏈表的節(jié)點(diǎn)中包含兩項(xiàng)八毯,一項(xiàng)是值,一項(xiàng)是指向下一個(gè)節(jié)點(diǎn)的指針瞄桨。當(dāng)前題目中话速,只給你一個(gè)節(jié)點(diǎn),讓你刪除該節(jié)點(diǎn)芯侥,(刪除節(jié)點(diǎn)的方法:1泊交、找到當(dāng)先節(jié)點(diǎn)的前一節(jié)點(diǎn),使前一節(jié)點(diǎn)的指針直接指向當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)柱查;2廓俭、將當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)的值復(fù)制到當(dāng)前節(jié)點(diǎn)的值,將當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)的指針復(fù)制到當(dāng)前節(jié)點(diǎn)的指針唉工,例:node->val=node->next->val;? node->next=node->next->next;)研乒,根據(jù)題目所示,由于不能獲取前一節(jié)點(diǎn)淋硝,所以使用第二種方法雹熬。由于下一節(jié)點(diǎn)已經(jīng)全部復(fù)制到當(dāng)前節(jié)點(diǎn),所以下一節(jié)點(diǎn)已經(jīng)無(wú)作用谣膳,進(jìn)行刪除可以釋放內(nèi)存竿报。