删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
方法一:博主一直使用的利用列表转换的方法,但是效率极其低下,但是比较好用,(羞涩脸^_^,实际上就是菜的理由)
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
data = []
temp = []
while head:
data.append(head.val)
temp.append(head.val)
head = head.next
for i in range(len(data)):
if data[i] == val:
temp.remove(data[i])
ptr = ListNode(0)
ptr1 = ptr
for i in range(len(temp)):
ptr.next = ListNode(temp[i])
ptr = ptr.next
return ptr1.next
方法二:由于使用的是单链表,需要单独考虑很多地方,比如头结点和尾结点,为了方便,可以直接在头结点之前增加一个结点方便搜索
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
first = ListNode('a')
first.next = head
p = first
q = head
while q:
if q.val == val:
p.next = q.next
q = p.next
else:
p = p.next
q = q.next
return first.next