快慢指针加虚拟头结点处理。注意处理链表长度为n的和小于n的情形。
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode node(0); node.next = head; ListNode* fast = head; ListNode* slow = &node; // fast前进 n步 for(int i=0; i<n; i++) { if(!fast) return head; fast = fast->next; } while(fast) { fast = fast->next; slow = slow->next; } ListNode* temp = slow->next->next; delete slow->next; slow->next = temp; return node.next; } };