給定一個(gè)單鏈表中的一個(gè)等待被刪除的節(jié)點(diǎn)(非表頭或表尾)。請(qǐng)?jiān)谠贠(1)時(shí)間復(fù)雜度刪除該鏈表節(jié)點(diǎn)。
Linked list is 1->2->3->4, and given node 3, delete the node in place 1->2->4
復(fù)制節(jié)點(diǎn)的值
刪除節(jié)點(diǎn)一般的做法是找到要?jiǎng)h除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),然后把這個(gè)節(jié)點(diǎn)的next指針指向要?jiǎng)h除的節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn),一般都是這樣做的,這個(gè)題要求O(1)的時(shí)間復(fù)雜度,顯然是不允許遍歷搜索的,而且給定的是節(jié)點(diǎn)的指針。
我們要?jiǎng)h除這個(gè)節(jié)點(diǎn),但是我們通過(guò)操作只能刪除它的下一個(gè)節(jié)點(diǎn),那我們能不能把下一個(gè)節(jié)點(diǎn)的數(shù)據(jù)拷貝過(guò)來(lái)到這個(gè)節(jié)點(diǎn),然后把下個(gè)節(jié)點(diǎn)刪除,這樣就相當(dāng)于把這個(gè)節(jié)點(diǎn)刪除了
我怎么會(huì)想到這個(gè)方法呢?哎,刷題容易懷疑智商!
寫(xiě)起來(lái)就不是一般的簡(jiǎn)單了,題目中默認(rèn)此節(jié)點(diǎn)不是表頭或表尾,所以這種方法是完全可以的,如果是表尾的話就不好玩了!
void deleteNode(ListNode * node) {
node->val=node->next->val;
node->next=node->next->next;
// write your code here
}