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