题目
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
输入:head = [], val = 1
输出:[]
解题思路:
-
直接查找
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 # """ # 删除头结点 while head and head.val == val: head = head.next # 删除非头结点 cur = head while cur != None and cur.next != None: if cur.next.val == val: cur.next = cur.next.next else: cur = cur.next return head
-
设置一个虚拟的头结点(dummy_head),直接从原头结点(dummy_head.next)开始查找,当查找节点(cur.next)值等于目标值时,直接将当前节点(cur)指向后一个节点(cur.next.next)
class Solution(object): def removeElements(self, head, val): """ :type head: ListNode :type val: int :rtype: ListNode """ dummy_head = ListNode(next=head) cur = dummy_head while cur.next != None: if cur.next.val == val: cur.next = cur.next.next else: cur = cur.next return dummy_head.next
-
递归查找
class Solution(object): """ :type head: ListNode :type val: int :rtype: ListNode """ def removeElements(self, head, val): # 头结点不存在时,直接返回 if not head: return None # 递归 head.next = self.removeElements(head.next,val) if head.val == val: return head.next else: return head