[leetcode-JavaScript]---19.刪除鏈表的倒數第N個節點

題目

給定一個鏈表,刪除鏈表的倒數第 n 個節點,而且返回鏈表的頭結點。javascript

示例:
    給定一個鏈表: 1->2->3->4->5, 和 n = 2.
    當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.
複製代碼

說明:java

給定的 n 保證是有效的。node

思考

這道題要用雙指針來實現。先用fast指針前進n,而後讓slow從head開始和fast一塊兒前進,直到fast到了末尾,此時slow的下一個節點就是要刪除的節點。(另外,若fast一開始前進n就已經不在鏈表中了,說明要刪除的節點正是head節點,那麼直接返回head的下一個節點接口。)bash

解決方法

  • 雙指針
/*
 * @lc app=leetcode.cn id=19 lang=javascript
 *
 * [19] 刪除鏈表的倒數第N個節點
 */
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
    if(head===null){
        return head
    }
    if(n===0){
        return head;
    }
    let fast=head;
    let slow=head;
    while(n>0){
        fast=fast.next;
        n--;
    }
    if(fast===null){
        return head.next;
    }
    while(fast.next!=null){
        fast=fast.next;
        slow=slow.next;
    }
    slow.next=slow.next.next;
    return head;
};
複製代碼

說明

相關文章
相關標籤/搜索