leetcode 203.移除链表元素
题目
203.移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
解题思路
1、创建一个虚拟头节点,简化删除过程(如果不创建虚拟头结点,则需要判断头节点是否为空,头结点为空和头节点非空,移除元素的代码有差异)
2、删除链表中值为val的元素:假设值为val的元素为node,删除node的过程是node前一个节点的next指向node后一个节点,把node跳过
实现代码
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
dummy_head = ListNode(next = head) # 创建一个虚拟头指针,它的next指向head
current = dummy_head # current指向虚拟头结点
while current.next:
if current.next.val == val: # 如果current下一个节点的值等于整数val
current.next = current.next.next # current的下一个节点指向下下和节点(该过程就会把值为val的节点跳过)
else:
current = current.next # 如果current下一个节点的值不等于整数val,current指针移动到下个节点
return dummy_head.next
leetcode 206.反转链表
题目
解题思路
方法一:使用头插法创建链表
方法二:不新建链表,只修改原链表next指针的指向
实现代码