LeetCode 探索初級算法-鏈表:21 刪除鏈表中的節點-20200404

今天是哀悼日,爲在這次疫情中犧牲的前線醫護工作人員,在山火中犧牲的消防工作人員,以及各種爲祖國犧牲的英雄們致敬!!!多難興邦!!!


之前的四五天都在忙組會和整理CSDN的文檔。我發現在一個文檔裏寫的太多,網站會反應很慢,因此,我把所有的算法題都拆成一個個小的博客了,可以通過下面的目錄鏈接查看。

LeetCode探索初級算法目錄


21 刪除鏈表中的節點-20200404

題目

請編寫一個函數,使其可以刪除某個鏈表中給定的(非末尾)節點,你將只被給定要求被刪除的節點。

現有一個鏈表 -- head = [4,5,1,9],它可以表示爲:

示例

輸入: head = [4,5,1,9], node = 5
輸出: [4,1,9]
解釋: 給定你鏈表中值爲 5 的第二個節點,那麼在調用了你的函數之後,該鏈表應變爲 4 -> 1 -> 9.

說明

  • 鏈表至少包含兩個節點。
  • 鏈表中所有節點的值都是唯一的。
  • 給定的節點爲非末尾節點並且一定是鏈表中的一個有效節點。
  • 不要從你的函數中返回任何結果。

注意事項

  1. 說實話,拿到題目我都蒙了。。。這兩個輸入,怎麼函數的參數就一個呢?而且到現在我還是濛濛的。之前我都會在VS Code上自己先寫一遍,現在到鏈表了,我都不知道怎麼寫了。。。
  2. 迫於無奈,我承認我百度了。

算法一

參看百度的算法,其實就是把要刪除的節點傳入到參數中。但是要注意的是,正常的操作是把前一個節點的NextIndex設置爲下一個節點的地址,同樣節點的值也是這麼操作。但是這裏只傳入了要刪除的節點。因此需要改變思路。

將要刪除的節點複製成爲下一個節點,就相當於刪除了該節點。在其他語言中可能存在分配的內存超出範圍等問題,但是Python有自動的垃圾回收機制,可以避開該問題。這部分我也不太懂,有大神知道的,可以指正下。

修改經歷:

1. 因爲比較簡單所以就直接成功了。(第一次提交)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def deleteNode(self, node):
        """
        :type node: ListNode
        :rtype: void Do not return anything, modify node in-place instead.
        """
        node.val = node.next.val
        node.next = node.next.next
        

心得體會:

之前只是用C寫過鏈表,這次用Python可以好好學學。


上一篇:LeetCode 探索初級算法-字符串:20 最長公共前綴-20200331

下一篇:LeetCode 探索初級算法-鏈表:21 刪除鏈表的倒數第N個節點-20200405

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章