一、203.移除链表元素
力扣题目链接(opens new window)
题意:删除链表中等于给定值 val 的所有节点。
示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
示例 2: 输入:head = [], val = 1 输出:[]
示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]
二、链表法
class ListNode:#定义针(定义链表节点)--指向值和下一个位置
def __init__(self,x):
self.val=x
self.next=None
class LinkList:
def __init__(self):#定义头针--指向头位置
self.head=None
def initList(self,data):#把输入的列表或数组转换为链表
self.head=ListNode(data[0])
r=self.head
p=self.head
for i in data[1:]:#第1个位置到最后一个进行遍历
node=ListNode(i)#给链表创建新节点,有val有next
p.next=node#给新节点塞进列表
p=p.next
return r
def printlist(self,head):#打印链表
if head==None:return
node=head
while node!=None:
print(node.val,end='')#在不换行的情况下打印节点(或元素)的值
node=node.next
def remove(self,head,target):
node=head
l=[]
if node.val!=target:
l.append(node.val)
while node.next:
if node.next.val == target:
node.next = node.next.next
else:
node = node.next
l.append(node.val)
else:
while node.next:
if node.next.val == target:
node.next = node.next.next
else:
node = node.next
l.append(node.val)
print(l)
if __name__=='__main__':
l=LinkList()
l1=input("head=").split()
val=input("val=")
if l1==[]:
print("[]")
else:
nums = l.initList(l1)
l.remove(nums, val)
三、结果
小结
链表的设定真的好麻烦,但是用指针去的时候真的很方便,哎,鱼和熊掌不可兼得哇。
容易混淆的地方可能就是参数吧,小心这个。然后就是如果遇到目标值删除该值的时候不要急着打印node.val,要等待node.next的指针指向node.next.next之后再进入循环,如果打印你会发现被删除地方的前面值会被再次打印。