zoukankan      html  css  js  c++  java
  • leetcode_19_Remove Nth Node From End of List (easy)

    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.

    解体:
    应该再一次循环,但是不知道链表总共多少数据

    简单的两次循环,但如何才能预知未来>_<

    (提示:英文翻译错误,哎,我的英文是体育老师教的)


    #include <iostream>
    using namespace std;

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

    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode *now = head;
            int i = 0;
            for(;now!=NULL;now = now->next){
                i++;
            }
            if(n>i){
                return NULL;
            }
            if(n==i){
                return head->next;
            }
            int j = 0;
            for(now=head;now!=NULL;now = now->next){
                j++;
                if(j == i-n){
                    ListNode *next = now->next->next;
                    delete now->next;
                    now->next = next;
                    break;
                }
            }
            return head;
        }
    };

    void printList(ListNode *head){
        ListNode *now = head;
        for(;now!=NULL;now = now->next){
             cout<<now->val<<"->";
        }
    }

    int main(int argc, const char * argv[]) {
        ListNode *head = (ListNode *)malloc(sizeof(ListNode));
        head->val = 1;
        head->next = NULL;
        ListNode *now = head;
        for(int i=2;i<6;i++){
            ListNode *next = (ListNode *)malloc(sizeof(ListNode));
            next->val = i;
            next->next = NULL;
            now->next = next;
            now = next;
        }
        cout<<"before"<<endl;
        printList(head);
        cout<<endl;
        Solution a;
        ListNode *final = a.removeNthFromEnd(head, 2);
        cout<<"after"<<endl;
        printList(final);
        return 0;
    }
    什么,尽然过了,what

     
  • 相关阅读:
    [bzoj 3048] [Usaco2013 Jan]Cow Lineup
    [bzoj 3192] [JLOI2013]删除物品
    搬迁至新博客的原因
    洛谷 P3317 [SDOI2014]重建(矩阵树定理+数学推导) [bzoj3534]
    [bzoj1002]: [FJOI2007]轮状病毒(矩阵树定理)
    [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
    高精度板子
    洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
    字符串--manacher算法(回文串匹配)
    洛谷 P2633 Count on a tree[bzoj2588](倍增lca+主席树)
  • 原文地址:https://www.cnblogs.com/ganeveryday/p/4903452.html
Copyright © 2011-2022 走看看