给定一个链表,删除倒数第n个节点。要求只遍历一遍
如链表:1->2->3->4->5,n=2,则结果为 1->2->3->5。
思路:设置两个指针,一个先向前移动n个节点,然后两个同步向前移动,直到前一个指针到达链表末端,则后一个指针的下一个节点就是要删除的节点。
注意:当删除的节点是链表头时是特殊情况,此时前一个指针已经移动到了链表末尾的null节点上,需特别处理。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast = head;
ListNode slow = head;
for(int i = 0; i<n; i++)
fast = fast.next;
if(fast == null)
return head.next;
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
}