给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
1.此题对比原题有改动
2.题目保证链表中节点的值互不相同
3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点
数据范围:
0<=链表节点值<=10000
0<=链表长度<=10000
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
{2,5,1,9},5
{2,1,9}
给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 2 -> 1 -> 9
{2,5,1,9},1
{2,5,9}
给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 2 -> 5 -> 9
class Solution: def deleteNode(self , head: ListNode, val: int) -> ListNode: # write code here if not head: return None if head.val == val: return head.next else: p1 = head p2 = head.next while p2: if p2.val == val: p1.next = p2.next return head else: p1 = p1.next p2 = p2.next return None
class Solution: def deleteNode(self , head: ListNode, val: int) -> ListNode: # write code here # if not head: return None # 哨兵节点:主要是为了简化 如果[删除的是第一个,需要单独处理的情况] sentinel = ListNode(0) sentinel.next = head # 快慢指针 fast,slow = head, sentinel while fast: if fast.val == val: slow.next = fast.next # 删除:即跳过该节点 # 若val不存在重复,只有一个去删除, # return sentinal.next else: # 必须用else,如果考虑删除val的多次出现 slow = slow.next fast = fast.next return sentinel.next
# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param head ListNode类 # @param val int整型 # @return ListNode类 # class Solution: def deleteNode(self , head: ListNode, val: int) -> ListNode: # write code here if not head:return if head.val==val:return head.next pre,cur=head,head.next while cur and cur.val!=val: pre,cur=cur,cur.next if cur:pre.next=cur.next return head