zoukankan      html  css  js  c++  java
  • Leetcode 题目整理-6 Swap Nodes in Pairs & Remove Duplicates from Sorted Array

    24. Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head.

    For example,
    Given 1->2->3->4, you should return the list as 2->1->4->3.

    Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

    注 :给定一个链表,交换每两个节点,返回首指针。要在常数空间内完成算法不能修改链表值,只能改变节点之间的链接。

    解:竟然可以输入奇数个,无语。

    if (head==0)
        {return head;}
        ListNode *backer, *fronter, *temp;
        //游标定位
        backer = head;
        if (head->next == NULL){ return head; }//针对只输入一个的情况
        fronter = head->next;
        temp = fronter->next;//可以有,也可以是NULL
        //进行交换
        head = fronter;
        fronter->next = backer;
        if (temp != NULL && temp->next!=NULL)
        {
            backer->next = temp->next;
        }
        else if (temp != NULL && temp->next == NULL)
        {
            backer->next = temp;
            return head;
        }
        else { backer->next = NULL; return head; }
        while (temp != NULL) 
        {
            //移动游标
            backer = temp;
    
            fronter = temp->next;
            temp = fronter->next;
            //进行交换
            fronter->next = backer;
            if (temp != NULL && temp->next != NULL)
            {
                backer->next = temp->next;
            }
            else if (temp != NULL && temp->next == NULL)
            {
                backer->next = temp;
                return head;
            }
            else { backer->next = NULL; return head; }
        }
        return head;

    26. Remove Duplicates from Sorted Array

    Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

    Do not allocate extra space for another array, you must do this in place with constant memory.

    For example,
    Given input array nums = [1,1,2],

    Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the new length.

    注:对于一个排好序的数组,移除其中重复的元素,使得每个元素只出现一次,然后返回新的长度。不能使用额外的空间。这个数组一定是越变越小的,所以只要恰当的使用指针移动数组中的数据应该可以不占用额外的空间。

    解:这里新学会了v.erase(iter)的使用

    if (nums.size() == 0)
            return 0;
        vector<int>::iterator nums_i = nums.begin(), nums_j = nums.begin() + 1;
        while (nums_i != nums.end() && nums_j != nums.end())
        {
            if (*nums_i == *nums_j)
            {
                nums_j=nums.erase(nums_j);//删除后者j并返回j后一个元素的指针,如果没有就返回end()指针
            }
            else{
                nums_i++; nums_j++;
            }
        } 
        return nums.size();
  • 相关阅读:
    SEO(Business)
    C#数组去掉重复的元素
    文件创建与文件格式的修改
    Filter(20160815)
    OmniGraffle导入stencils的两个方法以及优质的stencils下载网站推荐
    在Axure RP 8.0 中使用 Font Awesome 图标库完成设计并能在其他未安装该字体的电脑离线预览的方法
    社会性动物(艾略特•阿伦森)
    MacTex 在XeLaTex编译状态下插入的pdf格式图片无法显示问题的解决方案
    Markdown,别来无恙!
    男人来自火星 女人来自金星(约翰·格雷)
  • 原文地址:https://www.cnblogs.com/simayuhe/p/6185907.html
Copyright © 2011-2022 走看看