将链表的节点存放到vector中,通过vector的size()与n的差得到节点的索引,通过索引删除即可。
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head ListNode类 * @param n int整型 * @return ListNode类 */ ListNode* removeNthFromEnd(ListNode* head, int n) { // write code here vector<ListNode*> m_node_vec; ListNode* p_head = head; //将所有的节点保存到vector中; while(p_head) { m_node_vec.push_back(p_head); p_head = p_head->next; } //获取删除结点的上一个结点的索引; int index = m_node_vec.size() - n-1; if(index < 0) { free(m_node_vec[0]); m_node_vec[0] = NULL; return m_node_vec[1]; } else { ListNode* p = m_node_vec[index]; ListNode* tmp = p->next; p->next = p->next->next; free(tmp); tmp = NULL; return m_node_vec[0]; } } };