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

     
  • 相关阅读:
    用Ghost进行备份还原
    虚拟机出现“操作文件.PhysicalDrive1失败”的解决方法
    用typedef定义函数指针的问题
    模拟搭建Web项目的真实运行环境(七)
    模拟搭建Web项目的真实运行环境(六)
    模拟搭建Web项目的真实运行环境(五)
    模拟搭建Web项目的真实运行环境(四)
    javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通
    在gridControl的单元格中的多行文本
    Devexpress Winform Gridcontrol 中根据条件单元格的值改变单元格的颜色等属性。
  • 原文地址:https://www.cnblogs.com/ganeveryday/p/4903452.html
Copyright © 2011-2022 走看看