• 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;
    }
    /*

    */
  • 相关阅读:
    动态表单实现客户端二次过滤及字段汇总统计
    开放一些常见功能的工具类代码
    动态表单
    客户中增加按钮提前判断是否撞单 并提示
    通过插件来对打印数据进行处理
    mac 升级10.12 php debug 环境 跑不起的解决 解决方案
    感觉世界变化太快...
    Mac 升级一次,php 就崩溃一次,有味,苹果....
    http://s22.app1105796624.qqopenapp.com/
    unity 2d 游戏优化之路 遇坑记录
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5195785.html
Copyright © 2020-2023  润新知