题意:输入一个单链表,删除从链尾开始的第n个节点(从1开始),然后返回头结点
声明:n总是有效的,时间复杂度O(n)
思路:使用数据结构ArrayList,存放映射关系<下标, 节点>,扫描一遍单链表,建立每个节点与位序之间的关系,直接将位于倒数(n+1)的next指向倒数(n-1)节点
运行出现internal error,刷新网页,成功提交
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null)
return null;
ListNode node = head;
ArrayList
list = new ArrayList<>(); //充当hashMap
<下标,节点>
while(node != null){
list.add(node);
node = node.next;
}
int remIndex = list.size() - n;
if(remIndex == 0){ //删除头节点
head = head.next;
} else{
ListNode pivot = list.get(remIndex - 1);
pivot.next = list.get(remIndex).next;
}
return head;
}