博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 19. 删除链表的倒数第N个节点(Remove Nth Node From End of List )
阅读量:6529 次
发布时间:2019-06-24

本文共 1495 字,大约阅读时间需要 4 分钟。

19. 删除链表的倒数第N个节点

题目

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

知识点

解题

  1. 只遍历一遍就可以知道倒数第n个数据的值。
  2. 直观的想法是:先遍历一遍知道总数量m,然后再走一遍,走m-n步就走到了要删除节点的前一个节点删除即可。
  3. 更好点的做法:使用两个指针p1,p2,p1先走n步,然后一起走,当p1走到最后的节点(p1->next is None),p2恰好走到要删除节点的前一个.
class ListNode(object):    def __init__(self, x):        self.val = x        self.next = Noneclass Solution(object):    def removeNthFromEnd(self, head, n):        """        :type head: ListNode        :type n: int        :rtype: ListNode        """        h1 = head        h2 = head        for i in range(n):            h1 = h1.next        while h1.next is not None:            h1 = h1.next            h2 = h2.next        h2.next = h2.next.next        return head复制代码
  1. 这种解法的bug:如果是删掉链表的第一个数,那p1要先走n步,最终为h1=None,此时h1.next就会出错。
  2. 而且删掉首节点,也不能通过h2.next = h2.next.next实现。
  3. 可以在此情况下在头部加入哑节点或者直接返回head.next
if h1 is None:        return head.next复制代码
  1. 加入哑节点的方法:p1先走n+1步,当p1走到None的时候,p2走到了被删节点的前一个节点,删除节点后,返回哑节点的下一个节点
class Solution(object):    def removeNthFromEnd(self, head, n):        """        :type head: ListNode        :type n: int        :rtype: ListNode        """        h = ListNode(0)        h.next = head        h1 = h        h2 = h        for i in range(n + 1):            h1 = h1.next                while h1 is not None:            h1 = h1.next            h2 = h2.next        h2.next = h2.next.next        return h.next复制代码

转载于:https://juejin.im/post/5c6d579cf265da2da771c6dd

你可能感兴趣的文章
poj3984 迷宫问题(简单搜索+记录路径)
查看>>
Linux 服务器buff/cache清理
查看>>
算法试题 及其他知识点
查看>>
php课程---Json格式规范需要注意的小细节
查看>>
hadoop hdfs notes
查看>>
Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring
查看>>
(2编写网络)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署
查看>>
【转】如何使用分区助手完美迁移系统到SSD固态硬盘?
查看>>
NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
查看>>
ios兼容iphonex刘海屏解决方案
查看>>
就是要你懂TCP -- 握手和挥手
查看>>
Andrew Ng机器学习公开课笔记 -- Regularization and Model Selection
查看>>
《Python游戏编程快速上手》一1.3 如何使用本书
查看>>
《Visual Studio程序员箴言》----1.2 滚动与导航
查看>>
Processing编程学习指南2.7 Processing参考文档
查看>>
架构师速成-架构目标之伸缩性\安全性
查看>>
执行可运行jar包时读取jar包中的文件
查看>>
linux下ExtMail邮件使用及管理平台
查看>>
linux中iptables设置自建dns服务器的端口
查看>>
TP5+PHPexcel导入xls,xlsx文件读取数据
查看>>