LSGO——LeetCode實戰(鏈表系列):237題 刪除鏈表中的節點(Delete Node in a Linked List)

原題:

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

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

 

解法一:

其實這個題目並不難,主要是容易固定思維,導致題意理解錯。比如我一開始認爲這題目應該告訴我首節點head,同時題目刪除的時候應該刪除node這個鏈表的首節點的地址而不是val值。而實際的題目意思是刪除原鏈表中node.val這個節點,說的更直白一點就是你把這個node.val值刪除就可以了,不一定要刪除node這個節點。

接下來我們思考,單鏈表是隻能向後遍歷的,無法向前,也就是說告訴我了node這個節點,我現在想刪除node這個節點很簡單,但是問題是node.next應當接上哪個節點???

所以我們的思路是將node.next.val保留在node.val上,刪除node.next這個節點。

代碼如下:

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

class Solution(object):
    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

 

 

 

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