其他分享
首页 > 其他分享> > 【leetcode】203:移除链表元素

【leetcode】203:移除链表元素

作者:互联网

题目如下所示:

 

 这个题目也就是你一遇到一个node符合要求,你就可以将其删除。是一个比较简单的基础题目,用于熟悉链表当中的最基本操作。我们可以使用如下的方法,也就是暴力法,遍历整个linked list,然后将所有的nodes保存到一个list里面,对不符合要求的values进行排除,然后再重新建立一个新的linked list,将符合要求的values放置进去。但是这样的话,虽然时间复杂度为o(n),但是空间复杂度却有点大,我们先来看看这个方法的代码实现:

# 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:
        ls=[]
        while head:
            ls.append(head)
            head=head.next
        new_ls=[]
        for i in ls:
            if i.val==val:
                pass
            else:
                new_ls.append(i.val)
        ret=ListNode(0)
        cur=ret
        for i in new_ls:
            ret.next=ListNode(i)
            ret=ret.next
        return cur.next

方法二:

使用dummy vaiable

class Solution:
    def removeElements(self, head: ListNode, val: int) -> ListNode:
        dummy = ListNode()
        dummy.next = head
        p = dummy
        while p is not None:
            # 向前探一个节点检查是否等于val
            if p.next and p.next.val == val:
                # 跳过 p.next 节点
                p.next = p.next.next 
            else:
                p = p.next
        return dummy.next

 

标签:203,ListNode,val,self,head,next,链表,ls,移除
来源: https://www.cnblogs.com/geeksongs/p/15195958.html