给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
样例
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
挑战
O(n)时间复杂度
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public: /* * @param head: The first node of linked list. * @param n: An integer * @return: The head of linked list. */ ListNode * removeNthFromEnd(ListNode * head, int n) { // write your code here if(!head) return NULL; if(!head->next) { delete(head); return NULL; } ListNode* dummy=new ListNode(-1); dummy->next=head; ListNode *q,*pre; q=head; pre=dummy; while(n--&&q) { q=q->next; } while(q) { q=q->next; pre=pre->next; } ListNode* del=pre->next; pre->next=del->next; delete(del); return dummy->next; } };