给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
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: res = ListNode(-1) res.next = head pre =res while head: if head.val != val: pre = head else: pre.next =head.next head = head.next return res.next
class Solution: def deleteNode(self , head: ListNode, val: int) -> ListNode: # write code here dummy= ListNode(0) dummy.next = head cur = dummy while cur: if cur.next and cur.next.val == val: cur.next = cur.next.next cur = cur.next return dummy.next
class Solution: def deleteNode(self , head: ListNode, val: int) -> ListNode: # write code here dummy = ListNode(0) dummy.next = head head = dummy stack = [] while head: stack.append(head) head = head.next while stack: pre = stack[-1] if pre.next and pre.next.val == val: pre.next = pre.next.next stack.pop() return dummy.next
class Solution: def deleteNode(self , head: ListNode, val: int) -> ListNode: # 删除结点为头结点 if head.val == val: return head.next # 设置两个结点p1、p2:p1是删除结点p2的前一个结点 p1 = head p2 = head.next while p2.val != val and p2: p2 = p2.next p1 = p1.next else: p1.next = p2.next return head
class Solution: def deleteNode(self , head: ListNode, val: int) -> ListNode: # write code here vHead = ListNode(-1) vHead.next = head cur = vHead while cur.next: if cur.next.val == val: cur.next = cur.next.next break cur = cur.next return vHead.next看着需要判断头结点的不太优雅,这里提供一个Python使用哨兵节点将头结点变成普通节点的方案哈~
def deleteNode(self , head: ListNode, val: int) -> ListNode: # write code here if not head: return None if head.val == val: head = self.deleteNode(head.next, val) else: head.next = self.deleteNode(head.next, val) return head
# 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 head.val==val:#如果链表第一个节点就是要删除的直接输出剩余链表即可 return head.next res=head while head and head.next: if head.next.val==val: head.next=head.next.next return res head=head.next