zoukankan      html  css  js  c++  java
  • LeetCode

    19. Remove Nth Node From End of List 

    Problem's Link

     ----------------------------------------------------------------------------

    Mean: 

    给定一个链表,删除倒数第n个结点.

    analyse:

    简单粗暴 :)

    Time complexity: O(N)

     

    view code

    /**
    * -----------------------------------------------------------------
    * Copyright (c) 2016 crazyacking.All rights reserved.
    * -----------------------------------------------------------------
    *       Author: crazyacking
    *       Date  : 2016-02-17-13.51
    */
    #include <queue>
    #include <cstdio>
    #include <set>
    #include <string>
    #include <stack>
    #include <cmath>
    #include <climits>
    #include <map>
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    typedef long long(LL);
    typedef unsigned long long(ULL);
    const double eps(1e-8);

    struct ListNode
    {
       int val;
       ListNode *next;
       ListNode(int x) : val(x), next(NULL) {}
    };

    class Solution
    {
    public:
       ListNode* removeNthFromEnd(ListNode* head, int n)
       {
           vector<int> list;
           while(head)
           {
               list.push_back(head->val);
               head=head->next;
           }
           int si=list.size();
           if(si<=1) return head;
           // calculate the idx
           int idx=si-n;
           ListNode* ret;
           ListNode* tmp=ret;
           bool isFirst=true;
           for(int i=0; i<si; ++i)
           {
               if(i==idx)
                   continue;
               if(isFirst)
               {
                   tmp=new ListNode(list[i]);
                   ret=tmp;
                   isFirst=false;
               }
               else
               {
                   tmp->next=new ListNode(list[i]);
                   tmp=tmp->next;
               }
           }
           return ret;
       }
    };

    int main()
    {
       Solution solution;
       int n,num,tmp;
       while(cin>>n>>num)
       {
           ListNode* head=NULL,*root=NULL;
           for(int i=0; i<n; ++i)
           {
               cin>>tmp;
               if(i==0)
               {
                   head=new ListNode(tmp);
                   root=head;
               }
               else
               {
                   head->next=new ListNode(tmp);
                   head=head->next;
               }
           }

           ListNode* ans=solution.removeNthFromEnd(root,num);
           while(ans)
           {
               cout<<ans->val<<" ";
               ans=ans->next;
           }
           cout<<endl;
           cout<<"End."<<endl;
       }
       return 0;
    }
    /*

    */
  • 相关阅读:
    Dockerfile中ENTRYPOINT 和 CMD的区别
    Dockerfile的书写规则和指令的使用方法
    docker+ bind mount 部署复杂flask应用
    VUE验证器哪家强? VeeValidate absolutely!
    DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配
    那些NPM文档中我看不懂地方
    “随机数”函数的 ES6 实现
    django-filter version 2.0 改动
    msgbox用法
    html01. <!DOCTYPE html>
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5195785.html
Copyright © 2011-2022 走看看