移除链表元素

移除链表元素

203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

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
        """
        p = ListNode(next=head)
        p = head
        if head == None:
            return head
        while p.next != None:
            if p.val == val:
                head = p.next
                p = p.next
            elif p.next.val == val:
                p.next = p.next.next
            else:
                p = p.next 
        if p.val == val:
            p = p.next
            head = p
        return head

解二

# 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
        """
        sta = ListNode(next=head)
        p = sta
        while p.next != None:
            if p.next.val == val:
                p.next = p.next.next
            else:
                p = p.next 
        return sta.next

笔记

  1. python中不可变数据类型有:整型、浮点型、元组(改变变量值后,变量指向内存位置改变即为不可变类型);
  2. python中也是有指针的,python采用基于值的内存管理模式,每个变量都可以理解为指针(这也是为什么要用a = b[:]来创建一个不会影响原列表的列表副本),当指向不可变数据类型的变量改变值,会发生指向内存位置的改变;
  3. 解二中将后续移动的指针定义在head前面,即p.next = head,这样之后就不需要将链表首端和尾端为需要删除链点当作特殊情况。
posted @ 2023-04-18 11:53  纸越  阅读(17)  评论(0)    收藏  举报