LeetCode 203题 移除链表元素(21.4.2)
LeetCode 203题 移除链表元素
题目描述:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
涉及内容:链表
示例:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
输入:head = [], val = 1
输出:[]
思路:
首先除了题目所给的head、val之外,我们还需要添加一个dummy来存储当前链表,一个prev来存储当前结点的上一个结点
大体就是将链表遍历一遍:
-
首先我们用dummy=ListNode(0)(这个0也可以是如何数值,反正最后我们输出dummy.next 也就是其后续的结点情况)来指向当前结点,然后将指向head
-
然后遍历链表 这里和数组不同在于我们用while循环来进行 条件为 head指针不为空 也就是
while head is not None
-
如果当前遍历到的值为所给的value 则我们将上一个指针
prev.next=head.next 这样也就是将上一个指针next直接链到了当前指针的下一个值(换句话就是跳过了当前值)
-
如果不是,那么就
prev=prev.next
-
最后head=head.next进行下一个数值的查找
提交结果:

完整代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
dummy=ListNode(0)
dummy.next=head
prev=dummy
while head is not None:
if head.val==val:
prev.next=head.next #删除结点
else:
prev=prev.next #前继指针滑动
head=head.next #当前指针滑动
return dummy.next
浙公网安备 33010602011771号