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过不了



京公网安备 11010502036488号