双指针
- 剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
示例 1:
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
# 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: int) -> ListNode:
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
题解思路是这样的:
反思:自己写的时候容易错的是初始化,和在定位节点时的跳出循环的条件部分。而且在循环中国pre,和cur都要往后走。and题目应该不存在cur指向null的情况吧,代码也没写。
复杂度分析:
时间复杂度 O(N)O(N)O(N) : NNN 为链表长度,删除操作平均需循环 N/2N/2N/2 次,最差 NNN 次。
空间复杂度 O(1)O(1)O(1) : cur, pre 占用常数大小额外空间。
作者:Krahets
链接:https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof/solutions/167212/mian-shi-ti-18-shan-chu-lian-biao-de-jie-dian-sh-2/
来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。