【链表】Leecode-19. 删除链表的倒数第 N 个结点

举报
子都爱学习 发表于 2023/10/20 07:54:38 2023/10/20
655 0 0
【摘要】 【题目】给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]【题解】题解1:思路         删除节点是将该节点的前一个节点指向该节点的后一个节点,该节点可能...

【题目】

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

【题解】

题解1:

  • 思路

         删除节点是将该节点的前一个节点指向该节点的后一个节点,该节点可能是头节点,所以需要加一个头的伪节点

         两个指针,fast指针先走n+1步,然后slow指针和fast指针一起走,当fast指针走完那么slow指针就是到达倒数第n个节点,slow的next指向next.next,即为删除

  • 复杂度

         时间复杂度:O(n),空间复杂度:O(1)

  • 代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
        pre = ListNode(0, head)
        fast = pre
        slow = pre
        index = 0
        while index<n+1:
            fast = fast.next
            index+=1
        while fast:
            fast = fast.next
            slow = slow.next
        slow.next = slow.next.next
        return pre.next
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。