LeetCode-チェーンテーブル要素の除去


LeetCode-チェーンテーブル要素の除去
タイトルの説明:チェーンテーブルの指定値valに等しいすべてのノードを削除します.
例:
入力:1->2->6->3->4->5->6、val=6出力:1->2->3->4->5
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/remove-linked-list-elements著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
問題解決の考え方:最後に後チェーンテーブルのヘッダノードを操作する必要があるため、ノードpを初期ヘッダノードに等しくするように定義する必要があります.次に、各ノードを巡り、valに等しいノードを見つけて削除します.本題の肝心な問題は,ヘッダノードの値もvalである可能性があり,単純なループ判定では誤りである.ヘッダノードのみをコピー(H=head)してHで操作し,最後にheadに戻る.これにより、ヘッダノードも削除する必要があるノードであればエラーが発生します.もちろん、ループ操作を使用して、最初に削除するノードではないと判断できますが、これは少し面倒です.私が採用した方法は、まず頭の結点を気にしないで、head.nextは判断を開始し,後のすべてのノードを遍歴し,最後に断頭ノードを判断する.
pythonコード:
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def removeElements(self, head, val):
        """
        :type head: ListNode
        :type val: int
        :rtype: ListNode
        """
        if head is None:
            return None
        p = head
        s = None
        while p.next:
            if p.next.val == val:
                s = p.next
                p.next = p.next.next
                del s
            else:
                p = p.next
        if head.val == val:
            s = head
            head = head.next
            del s
        return head