成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

leetcode 19. Remove Nth Node From End of List

bigdevil_s / 965人閱讀

摘要:這題也是攜程年暑假實(shí)習(xí)生的筆試題。最開(kāi)始想的解法就是,先循環(huán)求鏈表的長(zhǎng)度,再用長(zhǎng)度,再循環(huán)一次就能移除該結(jié)點(diǎn)。結(jié)果對(duì)的,但是超時(shí)了。再返回整個(gè)鏈表。

Given a linked list, remove the nth node from the end of list and return its head.

For example,

Given linked list: 1->2->3->4->5, and n = 2.

After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.

這題也是攜程18年暑假實(shí)習(xí)生的筆試題。

最開(kāi)始想的解法就是,先循環(huán)求鏈表的長(zhǎng)度,再用長(zhǎng)度-n,再循環(huán)一次就能移除該結(jié)點(diǎn)。結(jié)果對(duì)的,但是超時(shí)了。代碼如下:

/**
 * 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) {
    let start = new ListNode(null);
    start.next = head;
    let len = 0,
        current = null,
        del = null;
    if(head === null){
        len = 0;
    }else{
        current = head;
        len = 1;
        while(current.next){
            len++;
        }
    }
    let position = len - n;
    if(position > -1 && position < len){
        current = head;
        let previous,
            index = 0;
        // 移除第一項(xiàng)
        if(position === 0){
            head = current.next;
        }else{
            while(index < position){
                previous = current;
                current = current.next;
                index++;
            }
            del = current;
            previous.next = current.next;
        }
        len--;
        return start.next;
    }else{
        return null;
    }
};

后來(lái)看了別人的最佳解法,覺(jué)得自己太蠢了。
最佳解法:用兩個(gè)指針,第一個(gè)指針slow的next指向第一個(gè)節(jié)點(diǎn),第二個(gè)指針fast指向第n+1個(gè)結(jié)點(diǎn),然后兩個(gè)指針同時(shí)后移,直到fast指針指向null,這個(gè)時(shí)候slow指針指向要?jiǎng)h除結(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),使用slow.next = slow.next.next刪除結(jié)點(diǎn)。再返回整個(gè)鏈表。代碼如下:

/**
 * 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) {
    var start = new ListNode(null);
    start.next = head;
    let slow = start,
        fast = head;
    slow.next = head;
    
    if(head.next === null){
        return null
    }
    
    for(var i = 0; i < n; i++){
        fast = fast.next;
    }
    
    while(fast !== null){
        slow = slow.next;
        fast = fast.next;
    }
    
    slow.next = slow.next.next;
    return start.next;
};

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82115.html

相關(guān)文章

  • leetcode 19 Remove Nth Node From End of List

    摘要:題目詳情題目要求輸入一個(gè)和一個(gè)數(shù)字。要求我們返回刪掉了倒數(shù)第個(gè)節(jié)點(diǎn)的鏈表。想法求倒數(shù)第個(gè)節(jié)點(diǎn),我們將這個(gè)問(wèn)題轉(zhuǎn)化一下。我們聲明兩個(gè)指針和,讓和指向的節(jié)點(diǎn)距離差保持為。解法使點(diǎn)和點(diǎn)的差距為同時(shí)移動(dòng)和使得到達(dá)的末尾刪除倒數(shù)第個(gè)節(jié)點(diǎn) 題目詳情 Given a linked list, remove the nth node from the end of list and return it...

    chaosx110 評(píng)論0 收藏0
  • leetcode19 Remove Nth Node From End of List 從鏈表中移除

    摘要:雖然時(shí)間復(fù)雜度還是但是顯然我們可以再一次遍歷中完成這個(gè)任務(wù)?,F(xiàn)在跳出下標(biāo)的思路,從另一個(gè)角度分析。快慢節(jié)點(diǎn)之間的距離始終是。當(dāng)快節(jié)點(diǎn)到達(dá)終點(diǎn)時(shí),此時(shí)的慢節(jié)點(diǎn)就是所要?jiǎng)h去的節(jié)點(diǎn)。 題目要求 Given a linked list, remove the nth node from the end of list and return its head. For example, ...

    YPHP 評(píng)論0 收藏0
  • leetcode-019-刪除鏈表倒數(shù)第N個(gè)結(jié)點(diǎn)(Remove Nth Node From End

    摘要:第題給定一個(gè)鏈表,刪除鏈表的倒數(shù)第個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。因?yàn)椋粲幸粋€(gè)真正的頭結(jié)點(diǎn),則所有的元素處理方式都一樣。但以第一個(gè)有效元素為頭結(jié)點(diǎn),就導(dǎo)致算法的不一致,需要單獨(dú)處理第一個(gè)有效元素頭結(jié)點(diǎn)。 leetcode第19題 Given a linked list, remove the n-th node from the end of list and return its h...

    brianway 評(píng)論0 收藏0
  • LeetCode 19:刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn) Remove Nth Node From End

    摘要:給定一個(gè)鏈表,刪除鏈表的倒數(shù)第個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。示例給定一個(gè)鏈表和當(dāng)刪除了倒數(shù)第二個(gè)節(jié)點(diǎn)后,鏈表變?yōu)檎f(shuō)明給定的保證是有效的。值得注意的的是,指向應(yīng)當(dāng)刪除的節(jié)點(diǎn)并無(wú)法刪除它,應(yīng)當(dāng)指向該刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。 給定一個(gè)鏈表,刪除鏈表的倒數(shù)第 n 個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。 Given a linked list, remove the n-th node from the ...

    qiangdada 評(píng)論0 收藏0
  • LeetCode 19:刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn) Remove Nth Node From End

    摘要:給定一個(gè)鏈表,刪除鏈表的倒數(shù)第個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。示例給定一個(gè)鏈表和當(dāng)刪除了倒數(shù)第二個(gè)節(jié)點(diǎn)后,鏈表變?yōu)檎f(shuō)明給定的保證是有效的。值得注意的的是,指向應(yīng)當(dāng)刪除的節(jié)點(diǎn)并無(wú)法刪除它,應(yīng)當(dāng)指向該刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。 給定一個(gè)鏈表,刪除鏈表的倒數(shù)第 n 個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。 Given a linked list, remove the n-th node from the ...

    周?chē)?guó)輝 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<