将链表的节点存放到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];
}
}
};
京公网安备 11010502036488号