1. 程式人生 > >【leetcode】Python實現-203.刪除連結串列中的節點

【leetcode】Python實現-203.刪除連結串列中的節點

203.刪除連結串列中的節點

描述

刪除連結串列中等於給定值 val 的所有節點。

示例

輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5

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

class Solution
(object):
def removeElements(self, head, val): """ :type head: ListNode :type val: int :rtype: ListNode """ if head: while head.val == val: head = head.next if head is None: return head q = head p = q.next while
p: if p.val == val: q.next = p.next else: q = q.next p = p.next return head

leetcode中所有涉及到連結串列的題,頭節點都儲存值,並不是我們通常認為的頭節點不儲存值,所以以上程式碼中while迴圈用來考慮第一個節點的值。但其實最好的辦法是沒有頭節點我們給它創造一個頭節點。

        pre_node = ListNode(None
) pre_node.next = head q = pre_node p = q.next while p: if p.val == val: q.next = p.next else: q = q.next p = p.next return pre_node.next

再次優化

        pre_node = ListNode(None)
        pre_node.next = head
        q = pre_node
        while q.next:
            if q.next.val == val:
                q.next = q.next.next
            else:
                q = q.next