zoukankan      html  css  js  c++  java
  • 【LeetCode】19

    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.

    Solution 1:  重点在于one pass,以空间换取时间,使用vector<ListNode*>记录list的节点,每个指针指向一个链表节点,遍历一遍list算出size,通过下标计算(size-n)即可定位到需要删除的节点

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* removeNthFromEnd(ListNode* head, int n) {  //runtime:12ms
    12         vector<ListNode*> vec;
    13         ListNode *temp=head;
    14         int size=0;
    15         while(temp){
    16             vec.push_back(temp);
    17             temp=temp->next;
    18             size++;
    19         }
    20         vec.push_back(NULL);//必不可少,否则如果删除的是倒数第一个元素的话下面的vec[i-1]->next=vec[i+1]中i+1溢出
    21         int i=size-n;
    22         if(i==0)//delete head
    23             return head->next;
    24         else{
    25             vec[i-1]->next=vec[i+1];
    26             return head;
    27         }
    28     }
    29 };

    Solution 2: 不需要额外的空间,当正数第n个移到链表尾时,head移到倒数第n个

     1 class Solution {
     2 public:
     3     ListNode* removeNthFromEnd(ListNode* head, int n) {    //runtime:4ms
     4         ListNode *temp=head;
     5         while(--n)temp=temp->next;
     6         ListNode *del=head,*predel=NULL;
     7         while(temp->next){
     8             temp=temp->next;
     9             predel=del;
    10             del=del->next;
    11         }
    12         if(predel==NULL)return head->next;
    13         else{
    14             predel->next=del->next;
    15             return head;
    16         }
    17         
    18     }
    19 };
  • 相关阅读:
    学习笔记——Maven settings.xml 配置详解
    工作随笔——tar命令批量解压
    工作随笔——xshell4安装后应该做的一些事
    容器中跨主机的网络方案-Weave
    使用kubeadm安装kubernetes
    AzureStack混合云大数据解决方案
    容器中跨主机的网络方案-flannel
    一行删除所有docker container的命令
    安装Kafka集群
    Azure VM的加速网络
  • 原文地址:https://www.cnblogs.com/irun/p/4716775.html
Copyright © 2011-2022 走看看