接上篇,关于链表还可以统一的处理:虚拟头节点。
这样的好处是不用划分上一篇文章中的三种情况,可以统一化处理。
一、题目
见上篇,此处略过
二、解析
设置虚拟头节点
在python中按照节点class我们可以这么设置:dummy = ListNode(0, head)
dummy = ListNode(0, head) #定义虚拟节点
初始化头节点和上一个节点
头节点设置完成之后,只需要初始化当前头节点 node = head ,和上一个节点 last = dummy
last = dummy #上一个节点是虚拟头节点
node = head #node指向head节点
判断值是否相等
当节点 node != None时,判断val是否匹配,如果 node.val == val 时,则 last.next = node.next;否则的话 last = node。
一次循环判断完成之后节点整体后移一个 node = node.next
while node:
if node.val == val:
last.next = node.next #匹配到val时跳过当前node
else:
last = node #否则的话last节点后移
node = node.next #当前node后移
三、编码
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
#虚拟头节点
dummy = ListNode(0, head)
last = dummy
node = head
while node:
if node.val == val:
last.next = node.next
else:
last = node
node = node.next
return dummy.next
写在最后:
关于题目需要调试的,节点class(题目给出)、链表class(在上一篇中已经具体给出)以及最终的调试均已经在上一篇文章中给出,此篇只补充虚拟头节点的解析和编码,希望大家共勉~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)