这题要求对指针掌握比较熟练,对内存地址理解要正确。我的理解就是刚开始的cur一定要指向head,此时的cur的地址指向为链表的头节点,而不是整个链表。因为链表的分开存放的,cur指向head,就是指向了头节点,就可以根据其他节点的地址知道所有链表。
# -*- coding: utf-8 -*-
"""
@Time : 2022/8/10 21:49
@Author : FJC
@File : 2-移除链表元素-自测.py
@Software: win10 python3.7
"""
class ListNode:
def __init__(self, val=None,next=None):
self.val=val
self.next = next
# 无虚拟节点
class Solution:
def removeElements(self, head, val):
if head == None:
return head
pre = None
cur = head # 将游标指向head
while cur != None:
if cur.val == val: # 第一次是判断头节点cur.val是否为val,后面则判断cur.next.val是否为val
if pre == None:
head = head.next
else:
pre.next = cur.next
else:
pre = cur
cur = cur.next
return head
solution=Solution()
print(solution.removeElements(head = [1,2,6,3,4,5,6], val = 6))
# -*- coding: utf-8 -*-
"""
@Time : 2022/8/10 17:53
@Author : FJC
@File : 2-移除链表元素.py
@Software: win10 python3.7
"""
class ListNode:
def __init__(self, val=None,next=None):
self.val=val
self.next = next
# 虚拟节点
class Solution:
def removeElements(self, head, val):
dummy_head = ListNode(0)
dummy_head.next=head
cur=dummy_head
print(id(dummy_head.next),id(cur.next))
while cur.next!=None:
if cur.next.val==val:
cur.next=cur.next.next #cur.next已经移动
else:
cur=cur.next
return dummy_head.next
solution=Solution()
print(solution.removeElements(head = [1,2,6,3,4,5,6], val = 6))