题解 | #删除链表的倒数第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过不了
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务