删除倒数第n个节点,就是删除正数第m-n+1个节点,所以可以定义一个快指针,让它先走n步,快指针距离链表尾部还有m-n步,然后慢指针开始移动,当快指针移动到最后一个节点的时候,慢指针走走到了第m-n个节点,然后直接删除即可
public ListNode removeNthFromEnd (ListNode head, int n) {
// write code here
if (head == null){
return null;
}
ListNode node = new ListNode(-1);
node.next = head;
ListNode p = node;
ListNode q = node;
while (q.next != null){
while (n-- > 0){
q = q.next;
}
if (q.next == null){
break;
}
p = p.next;
q = q.next;
}
p.next = p.next.next;
return node.next;
}
京公网安备 11010502036488号