每天一道算法题之移除链表元素
题目链接:
一、题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
二、示例
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
提示:
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50
三、题解
1.思路
在本题解中,主要通过遍历整个链表,找出我们需要移除的元素,将该元素的前一个元素指向该元素的下一个元素即可。
2.解题过程
在移除元素时,我们不得不考虑到需要移除的元素位于第一个位置的情况,因此我们可以设置两个指针,让它们
的next指向第一个元素即可解决问题。
(注意:在执行完cur.next=cur.next.next后,不可再将cur=cur.next,否则可能会有节点被跳过)
3.复杂度
时间复杂度: O(n)
空间复杂度: O(1)
四、代码演示
# 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: Optional[ListNode]
:type val: int
:rtype: Optional[ListNode]
"""
pre=cur=ListNode(next=head)#创建两个新节点,它们的next指向原链表的第一个节点
while cur.next:
if cur.next.val==val:
cur.next=cur.next.next
else:
cur=cur.next
return pre.next