题目
python代码
正序删除
将倒数第n个转换成正数的处理。然后分为头、尾、中三种情况处理:
def removeNthFromEnd( head, n):
pointer = head
length = 0
while pointer:
pointer = pointer.next
length += 1
if length == 1:
return None
pointer = head
if n >= length:
head.val = head.next.val
head.next = head.next.next
else:
if n == 1:
for i in range(length - 2):
pointer = pointer.next
pointer.next = None
else:
for i in range(length - n - 1):
pointer = pointer.next
pointer.next = pointer.next.next
return head
双指针
用两个相差n位的指针遍历链表,用右指针判断,用左指针进行操作。
def removeNthFromEnd(head, n):
if head.next == None:
return None
left = right = head
si = 0
while si < n:
si += 1
right = right.next
if right == None:
head = head.next
return head
while right.next != None:
left = left.next
right = right.next
if n == 1:
left.next = None
else:
left.next = left.next.next
return head