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
posted @ 2021-04-02 16:53  乖张❤  阅读(136)  评论(0)    收藏  举报