当前位置: 首页 > article >正文

每日计划-1207

1. 完成 143. 重排链表

题目要不能只改变值,所以不能用stack(栈)实现 单纯值操作。

法一:利用线性表vector,vector<ListNode*>vec;这句代码实现储存操作,采用中断处理,代码:if(i==j){
break;)实现。

法二:经典操作:找链表中点,反转链表,合并链表。

法一代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    void reorderList(ListNode* head) {
        if(head==nullptr)return ;
        vector<ListNode*>vec;//使用节点线性表
        ListNode*p=head;
        //储存节点
        while(p){
            vec.emplace_back(p);
            p=p->next;
        }
        
        int i=0,j=vec.size()-1;//数组大小下表减1 才是数组最后下标
        while(i<j){//交替重置链表
            vec[i]->next=vec[j];
            i++;
           //实现交替操作
            if(i==j){
                break;
            }
            vec[j]->next=vec[i];
            j--;
        }
        vec[i]->next=nullptr;
    }
};

法二代码:
 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:


    
    void reorderList(ListNode* head) {
        if(head==nullptr){
            return;
        }
        ListNode*mid=middlNode(head);
        ListNode*l1=head;
        ListNode*l2=mid->next;
        mid->next=nullptr;//重置节点
        l2=reverseList(l2);
        mergeList(l1,l2);
    }



    //找链表中点
    ListNode*middlNode(ListNode*head){
        ListNode*slow=head;
        ListNode*fast=head;
        //经典快慢指针操作 你走一步 我走两步 我们始终是两倍差距
        while(fast->next!=nullptr&&fast->next->next!=nullptr){//奇偶差别
            slow=slow->next;
            fast=fast->next->next;
      
        }
        return slow;
    }

    //反转链表
    ListNode*reverseList(ListNode*head){
        ListNode*prev=nullptr;
        ListNode*curr=head;
        //经典三变量问题 终止条件为 curr->next==nullptr 
        //不断实现将头节点放在链表最后
        while(curr!=nullptr){
            ListNode*nextTemp=curr->next;
            curr->next=prev;
            prev=curr;
            curr=nextTemp;
        }
        return prev;
    }
   
   /*经典递归反转
   ListNode*reverseList(ListNode*head){
        if(head->next==nullptr||head->next->next==nullptr){
            return head;
        }
        ListNode*newNode=reverseList(head->next);
        head->next->next=head;
        head->next=nullptr;
    }*/

//交替插入链表
    void mergeList(ListNode* l1, ListNode* l2) {
            ListNode* l1_tmp;
            ListNode* l2_tmp;
            while (l1 != nullptr && l2 != nullptr) {
                l1_tmp = l1->next;
                l2_tmp = l2->next;

                l1->next = l2;
                l1 = l1_tmp;

                l2->next = l1;
                l2 = l2_tmp;
            }
        }

    

};

2. 八股部分

 

1) 什么是多态性?C++中如何实现多态?

 多态性是指通过基类指针或调用派生类的函数,实现不同的行为。

多态性可以提高代码的灵活性和可拓展性,使程序能够根据不同的对象类型执行不同的操作。

2) 多态性的好处是什么? 

可以使代码更加灵活,易于扩展和维护。

例如。在一个动物描述程序中,可以使用多态性来处理不同类型的动物对象,只需要一个统一的接口来绘制各种图形,而不需要为每种图形都编写单独的绘制函数。

同时,多态性也可以提高代码的可重用性,减少重复代码的编写。


http://www.kler.cn/a/428064.html

相关文章:

  • hdfs:介绍三个脚本
  • JxBrowser 7.41.7 版本发布啦!
  • Mybatis是如何进行分页的?
  • c++:vector
  • 设计模式的艺术-策略模式
  • 单路由及双路由端口映射指南
  • 分布式设备虚拟化概述
  • 量化交易系统开发-实时行情自动化交易-8.15.Ptrade/恒生平台
  • apache部署若依前后端分离项目(开启SSL)
  • openharmony5.0版本源码一二级目录概览
  • 需要排序的子数组
  • 学生信息管理系统(简化版)后端接口
  • OpenAI 发布 o1 Pro 与 ChatGPT Pro:更强大、更智能的 AI 助手
  • 【设计模式系列】状态模式(二十三)
  • 关于删除有序数组中的重复项问题的几种方法
  • 捷米特 EtherNet/IP 总线协议网关的具体内容介绍
  • VMD + CEEMDAN 二次分解——创新预测模型合集
  • 计算机的错误计算(一百七十八)
  • IDC研究报告|云轴科技ZStack入选中国生成式AI应用开发平台主要厂商
  • Methods and Initializers
  • [学习笔记]JavaScript的异步编程
  • 【ArcGIS微课1000例】0134:ArcGIS Earth实现二维建筑物的三维完美显示
  • 用shell完成一个简单脚本
  • android 富文本及展示更多组件
  • Vulnhub--FristiLeaks_1.3 脏牛提权
  • CentOS 创建逻辑卷合并多个物理卷