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