【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