这个Python类Solution
中的方法removeElements
用于从链表中删除所有值为val
的节点。该方法通过使用一个哑节点(dummy node)简化了链表的操作。以下是代码的注释解读:
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
# 创建一个哑节点(dummy node),其值为-1,next指向head
dummyHead = ListNode(-1)
dummyHead.next = head
# 使用node指针遍历链表,从哑节点开始
node = dummyHead
# 遍历链表,直到node.next为空
while node.next is not None:
# 如果下一个节点的值为val,则删除该节点
if node.next.val == val:
node.next = node.next.next
else:
# 否则,继续遍历
node = node.next
# 返回新的链表头,跳过哑节点
return dummyHead.next
代码工作流程
创建哑节点(dummy node):
dummyHead = ListNode(-1) dummyHead.next = head
哑节点的值设为-1(或任意值),
next
指向链表的头节点head
。使用哑节点可以简化链表的删除操作,特别是当要删除头节点时。初始化指针:
node = dummyHead
初始化指针
node
,指向哑节点dummyHead
。这个指针用于遍历链表。遍历链表:
while node.next is not None:
使用
while
循环遍历链表,直到node.next
为空(即到达链表末尾)。检查并删除节点:
if node.next.val == val: node.next = node.next.next else: node = node.next
- 如果
node.next
的值等于val
,则删除该节点。通过将node.next
指向node.next.next
实现删除。 - 否则,将指针
node
移动到下一个节点。
- 如果
返回新的链表头:
return dummyHead.next
返回新的链表头,跳过哑节点
dummyHead
。
示例
假设链表为 1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6
,要删除值为6
的节点。
初始化:
dummyHead
:-1 -> 1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6
node
: 指向dummyHead
遍历链表:
- 检查
1
:不等于6
,移动到下一个节点。 - 检查
2
:不等于6
,移动到下一个节点。 - 检查
6
:等于6
,删除节点,链表变为1 -> 2 -> 3 -> 4 -> 5 -> 6
。 - 检查
3
:不等于6
,移动到下一个节点。 - 检查
4
:不等于6
,移动到下一个节点。 - 检查
5
:不等于6
,移动到下一个节点。 - 检查
6
:等于6
,删除节点,链表变为1 -> 2 -> 3 -> 4 -> 5
。
- 检查
返回新的链表头:
1 -> 2 -> 3 -> 4 -> 5
。