2021-04-06

19. Remove Nth Node From End of List

  • 教你如何巧妙地使用双指针,我自己用的还是不够灵活啊
  • 里面有个关于单向链表结点的删除可以注意一下
  • 此题不难
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode newhead(0);
        newhead.next = head;
        ListNode* slow = &newhead;
        ListNode* fast = &newhead;
        for (int i=0;i<n;i++) fast= fast->next;
        while(fast->next){
            slow=slow->next;
            fast=fast->next;
        }
        ListNode* d = slow->next;
        slow->next = slow->next->next;
        delete d;
        return newhead.next;
    }
};


23. Merge k Sorted Lists

这道题乍一看好像是HARD的,有点唬人,实际上一点都不难。。。考察的点貌似就两个

  • 首先是对于MergeTwoSortedLists的练习,这个已经熟得不能再熟了
  • 然后是稍微考察了一点vector的知识(当然,为了时间复杂度低一点,尽量还是不使用vector自带的push_back,erase等命令啦)
  • 这里就用了两循环,不停减少len的长度,本菜鸡目测时间复杂度应该是o(nlogn)?
class Solution {
public:
    ListNode* merge(ListNode* l1, ListNode* l2){
        ListNode dummy(0);
        ListNode* head = &dummy;
        while(l1&&l2){
            if (l1->val < l2->val){
                head->next = l1;
                l1 = l1->next;
            }
            
            else{
                head->next = l2;
                l2= l2->next;
            }
            head = head->next;
        }
        head->next = l1 ? l1 : l2;
        return dummy.next;
    }
    
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if (lists.empty()) return nullptr;
        int len = lists.size();
        while(len>1){
            for(int i =0;i<len/2;i++)
                lists[i] = merge(lists[i], lists[len-i-1]);
            len = (len+1)/2;
        }
        return lists.front();
        
    }
};

至此为止,top 100 liked questions中所有带linked list标签的题都刷掉了。。。。只能说线性表可能是属于比较简单的,接下来的征途是星辰大海啊~~

加油!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章 1.9 令人困惑的语法 1.9.1 stl_config.h中的各种组态(configurations) ...
    镜中无我阅读 1,067评论 0 0
  • day4 33.二叉搜索树的后序遍历序列 思路:运用递归,不断判断左右子树的后序遍历序列(最后一个数字是根节点,前...
    IAmKepler阅读 249评论 0 0
  • C++ 容器与算法 vector 容器: 动态数组,可动态扩容,扩容时重新开辟原有长度2倍的长度,然后将原有的数据...
    _喝喝酒吹吹风_阅读 411评论 0 0
  • 1. 介绍 JAVA作为使用的主力语言,掌握下其历史发展也是有必要的。看看从JAVA5开始到现在的JAVA9有哪些...
    孔特利亚诺阅读 169评论 0 0
  • 08.03 1、《王道机试》—— 动态规划搬宿舍步骤:(1)将所有物品重量递增排序(2)用二维数组dp[i][j]...
    gufsicsxzf阅读 553评论 0 0