【leetcode】Python實現-203.刪除連結串列中的節點
阿新 • • 發佈:2019-01-04
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