先看一眼题:
思路:
感觉好简单呀,遍历两遍不就完事了吗? 然后看到他要求只扫描一次链表,想了一会儿,可以用栈呀。
提交第一次,发现没有考虑如果要删除的元素是第一个怎么办,加了个count搞定。
代码:
public ListNode removeNthFromEnd(ListNode head, int n) {
Stack<ListNode> stack = new Stack<ListNode>();
ListNode p = head;
int count = 0;
while (p!=null){
stack.push(p);
p=p.next;
count++;
}
if(n==count)
return head.next;
ListNode pre,post=null;
for(int i = 0 ; i < n ; i++){
post = stack.pop();
}
pre = stack.peek();
pre.next=post.next;
return head;
}