目录/Table of Content
第二十天问:Remove Linked List Elements
首先,先介绍一下这次题目。现在给你一条单链表 (Singly-linked List),每个节点都储存了一个整数,然后需要刪除数值与val
相同的节点,再返回完成刪除的单链表。
大家好,我是一个喜欢研究算法、机械学习和生物计算的小青年,我的CSDN博客是:一骑代码走天涯
如果您喜欢我的笔记,那么请点一下关注、点赞和收藏。如果內容有錯或者有改进的空间,也可以在评论让我知道。😄
题目&示例 (引用自 LeetCode)
Remove all elements from a linked list of integers that have value val.
Example:
Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5
解题思路
这题目,无可避免地必须遍历整张单链表,时间复杂度为 O(
n
n
n),n
是链表的长度。但是,我在做题的时候也考虑其他情況,比如输入的表是空表就自动返回原链表就行,还有 返回用的头节点如果数值和val
一样,需要把头节点移到下一个有效的节点,而不是直接刪除就了事。
以下就是我提交的代码,可以参考。
代码
时间复杂度:O(
n
n
n)
空间复杂度:O(
1
1
1)
# 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:
if head is None:
return head
# Settle head node, which should not equal val
while head.val == val:
head = head.next
if head is None:
return head
# Iterate the list until reaching last node
Curr = head
while Curr.next is not None:
if Curr.next.val == val:
Curr.next = Curr.next.next
else:
Curr = Curr.next
return head