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