值得记录的问题,一开始用了LinkedBlockingQueue,使用pop()出队的时候,发现空指针,这是因为链表的结构导致,属于常识(我不知道o(╥﹏╥)o)
package com.yunlong.test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
// LinkedBlockingQueue pop()头会导致空指针
public class Letcode {
public static void main(String[] args) {
ListNode listNode = new ListNode(1);
listNode.next = new ListNode(2);
listNode.next.next = new ListNode(3);
listNode.next.next.next = new ListNode(4);
listNode.next.next.next.next = new ListNode(5);
System.out.println(removeNthFromEnd(listNode, 2));
}
public static ListNode removeNthFromEnd(ListNode head, int n) {
BlockingQueue queue = new ArrayBlockingQueue(10);
ListNode p = head;
int i = 0;
// 找到元素
while (i <= n) {
try {
queue.put(p.val);
} catch (InterruptedException e) {
e.printStackTrace();
}
p = p.next;
i ++;
}
// 刪除元素
p = p.next;
// 重构链表
ListNode newListNode = new ListNode(-1);
ListNode cursor = newListNode;
while (queue.size() != 0) {
ListNode node = new ListNode((Integer) queue.poll());
cursor.next= node;
cursor = node;
}
cursor.next = p;
return newListNode.next;
}
}