给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
注意事项
链表中的节点个数大于等于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(n > 0) { ListNode *pBegin=head, *pEnd=head; while(n-- && pEnd!=NULL) { pEnd = pEnd->next; } // n<链表长度 if(n == -1 && pEnd!=NULL) { while(pEnd->next != NULL) { pBegin = pBegin->next; pEnd = pEnd->next; } pBegin->next = pBegin->next->next; return head; } // n>链表长度 else if(n > -1 && pEnd!=NULL) { return head; } // n=链表长度 else { return head->next; } } } };