题目
给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除。
基本思路
方法一。时间复杂度O(N),空间复杂度O(N)。
利用栈或者其他存储结构。将不等于num的节点收集起来,收集完成后再重新连接即可。代码实现如下:
def removeRepl(head,num):
if head == None:
return
stack = []
while head.value!=num:
stack.append(head)
head = head.next
while len(stack)!=0:
stack[-1].next = head
head = stack.pop()
return head
方法二。时间复杂度O(N),空间复杂度(1)。
首先从链表头开始,找到第一个值不等于num的节点,作为新的头节点。之后继续往后遍历,将所有值为num的节点删除即可。代码实现如下:
def replceRepl2(head,num):
if head == None:
return head
while head!=None and head.value = num:
head = head.next
pre = head
cur = head.next
while cur!=None:
if cur.value == num:
pre.next = cur.next
else:
pre = cur
cur = cur.next
return head