zoukankan      html  css  js  c++  java
  • [LeetCode] Remove Nth Node From End of List

    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.

    思路一: 取到 整个link的长度l,然后移删除第l-n 个节点。

    思路二:取两个指针,front和back,front优先于back n 步,当front指向最后一个节点时,back指向从后数n+1节点,然后删除第n个节点。

    注意code中使用了dummy节点,避免了如果删除head节点的复杂逻辑判断。也避免了front指向NULL的情况,非常好用,屡试不爽。

    class Solution {
        public:
            ListNode *removeNthFromEnd(ListNode *head, int n) {
                ListNode dummy(-1);
                dummy.next = head;
                ListNode* front = &dummy;
                ListNode* back = &dummy;
        
                while(n)
                {   
                    front = front->next;
                    n--;
                }   
    
                while(front->next)
                {   
                    front = front->next;
                    back = back->next;
                }   
    
                back->next = back->next->next;
                return dummy.next;
    
            }   
    };
  • 相关阅读:
    嵌入式linux问题杂锦
    QT creator 调试问题
    torcs代码
    ubuntu12.04安装KDevelop
    ubuntu12.04LTS安装以及卸载 QT4.8.6和QT creator2.5.2
    用vs2010编译vs2013建的工程
    mysql+matlab配置
    流形学习笔记
    可用的rtmp互联网地址
    信用卡术语
  • 原文地址:https://www.cnblogs.com/diegodu/p/4277045.html
Copyright © 2011-2022 走看看