链表:删除链表的倒数第n个节点

112 阅读1分钟

image.png

方法:

  1. 要删除倒数第n个,先找到倒数第n个的前一个节点
  2. 使用快慢指针,快指针先走n步,再和慢指针一起走,快指针走到结尾,慢指针刚好在第n处
function removeNthFromEnd( head ,  n ) {
    let fast = head;
    let slow = head;
    let pre;
    for(let i = 0; i < n; i++) {
        if(!fast) return head.next;
        fast = fast.next;
    }
    if(!fast) return head.next;
    while(fast) {
        fast = fast.next;
        pre = slow; // 前一个节点
        slow = slow.next;
    }
    
    pre.next = slow.next;
    return head;
}