每日一题——leetcode237 删除链表中的结点
1 題目
237. 刪除鏈表中的節(jié)點(diǎn)
難度簡單
請(qǐng)編寫一個(gè)函數(shù),用于 刪除單鏈表中某個(gè)特定節(jié)點(diǎn) 。在設(shè)計(jì)函數(shù)時(shí)需要注意,你無法訪問鏈表的頭節(jié)點(diǎn) head ,只能直接訪問 要被刪除的節(jié)點(diǎn) 。
題目數(shù)據(jù)保證需要?jiǎng)h除的節(jié)點(diǎn) 不是末尾節(jié)點(diǎn) 。
示例 1:
輸入:head = [4,5,1,9], node = 5
輸出:[4,1,9]
解釋:指定鏈表中值為 5 的第二個(gè)節(jié)點(diǎn),那么在調(diào)用了你的函數(shù)之后,該鏈表應(yīng)變?yōu)?4 -> 1 -> 9
示例 2:
輸入:head = [4,5,1,9], node = 1
輸出:[4,5,9]
解釋:指定鏈表中值為 1 的第三個(gè)節(jié)點(diǎn),那么在調(diào)用了你的函數(shù)之后,該鏈表應(yīng)變?yōu)?4 -> 5 -> 9
示例 3:
輸入:head = [1,2,3,4], node = 3
輸出:[1,2,4]
示例 4:
輸入:head = [0,1], node = 0
輸出:[1]
示例 5:
輸入:head = [-3,5,-99], node = -3
輸出:[5,-99]
提示:
- 鏈表中節(jié)點(diǎn)的數(shù)目范圍是 [2, 1000]
- -1000 <= Node.val <= 1000
- 鏈表中每個(gè)節(jié)點(diǎn)的值都是唯一的
- 需要?jiǎng)h除的節(jié)點(diǎn) node 是 鏈表中的一個(gè)有效節(jié)點(diǎn) ,且 不是末尾節(jié)點(diǎn)。
2 思路
我們在學(xué)習(xí)單鏈表刪除的時(shí)候,一般都是從頭結(jié)點(diǎn)開始找起,找到要?jiǎng)h除結(jié)點(diǎn)的前置結(jié)點(diǎn)。
但是在本題中,它并不給我們頭結(jié)點(diǎn),而是給我們要?jiǎng)h除的結(jié)點(diǎn)指針,這個(gè)時(shí)候我們需要轉(zhuǎn)換思路,即將后一個(gè)結(jié)點(diǎn)的值賦給要?jiǎng)h除的結(jié)點(diǎn),然后把后一個(gè)結(jié)點(diǎn)刪除。
這樣,我們就巧妙地偷天換日地解決了這個(gè)問題。
既然知道解法了,我們開始寫代碼吧。
3 代碼
/*** 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) {ListNode * cur = node;//移動(dòng)指針cur = node->next;//賦值node->val = cur->val;//刪除結(jié)點(diǎn)node->next = cur->next;delete(cur);} };4 小結(jié)
綜上所述,這道題的時(shí)間復(fù)雜度為O(1),空間復(fù)雜度也為O(1)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的每日一题——leetcode237 删除链表中的结点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为备份历史版本_华为手机NAS备份时提
- 下一篇: 域名服务器(DNS)工作原理