题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
这里想要理解链表的解题思路必须要知道的链表中的=号,其实都是浅拷贝,比如a=b,则a,b两个变量指向同一片内存空间,但是如果后面有一个变量又被重新赋值的话比如b,相当于b这个变量指向的内存空间就变了,但a不会跟着变,还是指向原来的那片内存空间。具体原理如下图所示:
题解:head用来遍历整个链表,dummy节点用来始终保持它next指向这个链表的头节点,然后移除掉当前的节点需要它的previous节点所以要引入pre变量。
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
dummy = ListNode(0)
dummy.next = head
prev = dummy
while head: #链表最后一个元素的next指向NULL
if head.val == val:
prev.next = head.next
head = head.next
else:
prev = head
head = head.next
return dummy.next