输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
题解:
双指针,第一个指针和第二个指针之间相差N个位置,当第一个指针指到空指针时,第二个指针指向的位置就是要删除的第N个结点的前面的指针。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
int count =0;
ListNode *abandant = new ListNode(0,head);
ListNode *flag,*pre_flag= abandon;
flag = head;
while(flag){
count ++;
if (count>n){
pre_flag = pre_flag->next;
}
flag = flag->next;
}
pre_flag->next = pre_flag->next->next;
ListNode* ans = abandon->next;
delete abandon;
return ans;
}
};
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
abandon = ListNode (0,head)
flag = head
pre_flag = abandon
while flag:
if n<=0:
pre_flag = pre_flag.next
flag = flag.next
n -= 1
pre_flag.next = pre_flag.next.next
return abandon.next