剑指offer13题-在O(1)时间内删除链表节点
1、输入是val: ListNode 解法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, head: ListNode, val: ListNode) -> ListNode:
if not (head and val):
return False
if val.next != None:
tmp = val.next
val.value = tmp.value
val.next = tmp.next
elif head == val:
head = None
else:
node = head
while node.next!=val:
node = node.next
node.next = None
return head
2、输入是 val: int 解法
class Solution:
def deleteNode(self, head: ListNode, val: int) -> ListNode:
dummy = ListNode(0) # 设置伪结点
dummy.next = head
if head.val == val: return head.next # 头结点是要删除的点,直接返回
while head and head.next:
if head.next.val == val: # 找到了要删除的结点,删除
head.next = head.next.next
head = head.next # 找到了之后为什么还要移动一个
return dummy.next
下一篇:
docker导入镜像时候遇到微坑
