题解 | #删除链表的倒数第n个节点#

删除链表的倒数第n个节点

http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

one-pass解法,搬运至leetcode官方题解第29题,4个重点在代码里标出,避免冗余代码
https://leetcode.com/problems/remove-nth-node-from-end-of-list/solution/

class Solution:
    def removeNthFromEnd(self , head , n ):
        # write code here
        dummy = ListNode(0)
        dummy.next = head
        lo, hi = dummy, dummy #重点1: 不是指向head,而是head的前驱结点

        for i in range(n+1): #重点2: 第一次循环n+1次,而不是n次
            if not hi: # 这一句也可以不要,test case中没有出现n大于链表长度的情形
                return head.next 
            hi = hi.next

        while hi: #重点3: 这样写循环条件,循环结束后,lo.next就是待删除的结点
            lo = lo.next
            hi = hi.next

        lo.next = lo.next.next
        return dummy.next # 重点4:不能return head,否则test case{1}, 1过不了
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
整顿职场的柯基很威猛:这种不可怕,最可怕的是夹在一帮名校里的二本选手,人家才是最稳的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务