直接思路: 扫描一遍链表看一下有多长,然后移动到指定节点删掉即可。
进阶: 一遍扫描实现!!
扫描一遍放入栈中,出栈的第n个即为删除的节点,栈顶的节点为删除结点的前驱结点
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
stack<ListNode *> st;
ListNode *p = head;
while (p) {
st.push(p);
p = p->next;
}
for (int i = 0; i < n; ++i) {
st.pop();
}
if (!st.empty()) {
ListNode *top = st.top();
top->next = top->next->next;
}else {
return head->next;
}
return head;
}
};
注意的点:注意考虑到删除第一个结点的情形!!!