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

织梦网站手机版怎么做最吉利旺财的建筑公司名字

织梦网站手机版怎么做,最吉利旺财的建筑公司名字,淘宝上做的网站可以优化吗,100部禁用app文章目录 链表总结 常用技巧两数相加题解代码 两两交换链表中的节点题解代码 重排链表题解代码 合并k个升序链表题解代码 K个一组翻转链表题解代码 链表总结 常用技巧 画图 直观 形象 便于理解引入虚拟头节点,便于处理边界情况,方便我们对链表进行…

文章目录

  • 链表总结 + 常用技巧
  • 两数相加
    • 题解
    • 代码
  • 两两交换链表中的节点
    • 题解
    • 代码
  • 重排链表
    • 题解
    • 代码
  • 合并k个升序链表
    • 题解
    • 代码
  • K个一组翻转链表
    • 题解
    • 代码

在这里插入图片描述

链表总结 + 常用技巧

  1. 画图 = 直观 + 形象 + 便于理解
  2. 引入虚拟头节点,便于处理边界情况,方便我们对链表进行操作

在这里插入图片描述
3. 大胆去定义变量,不要吝啬空间,可以简单化链表链接
在这里插入图片描述

  1. 快慢双指针,判断环,找链表中环的入口,找链表中倒数第n个节点
  2. 链表中的常用操作:
    创建一个新节点 new
    尾插
    头插,使用虚拟头节点,例题逆序链表,如下图

在这里插入图片描述

两数相加

题目链接
在这里插入图片描述

题解

1. 在链表中模拟两数相加的过程
2. 注意t的进位,一个链表比另一个链表长的情况,开虚拟头结点,我们模拟相加的时候从低位开始加,这里刚好是从低位开始加的,不需要逆置链表

在这里插入图片描述

代码

class Solution 
{
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {// 记录第一个链表和第二个链表ListNode* cur1 = l1,*cur2 = l2;ListNode* newhead = new ListNode(0);// 哨兵位节点int t = 0;// 记录进位ListNode* pcur = newhead;// 尾指针// cur1,cur2,t都不为空while(cur1 || cur2 || t){// 加上第一个链表if(cur1){t += cur1->val;cur1 = cur1->next;}// 加上第二个链表if(cur2){t += cur2->val;cur2 = cur2->next;}pcur->next = new ListNode(t % 10);pcur = pcur->next;t /= 10;}    // 防止内存泄漏pcur = newhead->next;delete newhead;return pcur;}
};

两两交换链表中的节点

题目链接
在这里插入图片描述

题解

1. 模拟
2. 创建4个变量,一个虚拟节点,最后只需返回虚拟节点的next指针,然后交换两数的指针,让指针移动到下一个要交换的位置
3. 注意数为奇数和偶数的情况,为偶数时cur指针为空,为奇数的时候next指针为空

在这里插入图片描述

代码

class Solution 
{
public:ListNode* swapPairs(ListNode* head) {if(head == nullptr) return nullptr;if(head->next == nullptr) return head;ListNode* newhead = new ListNode(0);ListNode* prev = newhead;ListNode* cur = head;ListNode* next = cur->next;ListNode* nnext = next->next;while(cur && next){// 交换节点prev->next = next; next->next = cur;cur->next = nnext;// 修改指针并且注意顺序prev = cur;cur = nnext;if(cur == nullptr) break;next = nnext->next;if(next == nullptr) break;nnext = next->next;}cur = newhead->next;delete newhead;return cur;}
};

重排链表

题目链接
在这里插入图片描述

题解

1. 模拟
2. 先找到链表的中间节点,slow->next为分割点分割两个链表,利用头插法逆置后面的一个链表,最后按顺序链接两个链表

在这里插入图片描述

利用快慢双指针分割链表
在这里插入图片描述
头插法
在这里插入图片描述

代码

class Solution 
{
public:void reorderList(ListNode* head) {// 快慢双指针找链表的中间节点// 0个1个2个节点不需要重排if(head == nullptr || head->next == nullptr || head->next->next == nullptr) return;ListNode* slow = head;ListNode* fast = head;// 奇数个节点和偶数个节点while(fast && fast->next){slow = slow->next;fast = fast->next->next;}// 把slow->next做为分割链表的节点// 方便分割链表// 否则slow做为分割节点,还需要加入虚拟节点,也还是是slow->next// 头插法进行分割链表// 逆置第二个链表ListNode* head2 = new ListNode(0);ListNode* cur = slow->next;slow->next = nullptr;while(cur){ListNode* next = cur->next;cur->next = head2->next;head2->next = cur;cur = next;}// 尾插法连接两个链表ListNode* newhead = new ListNode(0);ListNode* prev = newhead;ListNode* cur1 = head,*cur2 = head2->next;// 第一个链表比第二个链表长while(cur1){prev->next = cur1;cur1 = cur1->next;prev = prev->next;if(cur2){prev->next = cur2;cur2 = cur2->next;prev = prev->next;}}delete head2;delete newhead;}
};

合并k个升序链表

题目链接
在这里插入图片描述

题解

在这里插入图片描述

代码

class Solution 
{struct cmp{bool operator()(const ListNode* l1,const ListNode* l2){return l1->val > l2->val;}};
public:ListNode* mergeKLists(vector<ListNode*>& lists) {// 创建一个小根堆priority_queue<ListNode*,vector<ListNode*>,cmp> heap;// 让所有的头结点进入小根堆for(auto& x : lists){if(x) heap.push(x);}ListNode* newhead = new ListNode(0);ListNode* cur = newhead;while(!heap.empty()){ListNode* t = heap.top();cur->next = t;heap.pop();cur = cur->next;if(t->next) heap.push(t->next); }cur = newhead->next;delete  newhead;return cur;}
};

K个一组翻转链表

题目链接
在这里插入图片描述

题解

1. 注意每次更新一下prev这个指针,prev = tmp
在这里插入图片描述

代码

class Solution 
{
public:ListNode* reverseKGroup(ListNode* head, int k) {// 先算出有多少个节点int count = 0;ListNode* cur = head;while(cur){count++;cur = cur->next;}// 头插法int p = count / k;ListNode* newhead = new ListNode(0);ListNode* prev = newhead;cur = head;for(int i = 0;i < p;i++){ListNode* tmp = cur; for(int j = 0;j < k;j++){ListNode* next = cur->next;cur->next = prev->next;prev->next = cur;cur = next;}prev = tmp;}prev->next = cur;prev = newhead->next;delete newhead;return prev;}
};

文章转载自:

http://hIlVDYT5.zwckz.cn
http://S3kVOkkY.zwckz.cn
http://7UBOOPVN.zwckz.cn
http://OkbzWuX7.zwckz.cn
http://fDKoDjhC.zwckz.cn
http://8iZnlASN.zwckz.cn
http://PnTmUi3o.zwckz.cn
http://eK3UQCve.zwckz.cn
http://CJC5cFfa.zwckz.cn
http://p3gEkA8M.zwckz.cn
http://mL7LDcUY.zwckz.cn
http://F0UA9teC.zwckz.cn
http://AEjhVpyM.zwckz.cn
http://EZSAjuh2.zwckz.cn
http://32fX9MGZ.zwckz.cn
http://Fvjy0iMP.zwckz.cn
http://72Oc7WR1.zwckz.cn
http://NTInHWqU.zwckz.cn
http://Ti3bIOus.zwckz.cn
http://IeMUcKvl.zwckz.cn
http://IgIuwGM9.zwckz.cn
http://TAJ2eZ9J.zwckz.cn
http://N1yDmLDC.zwckz.cn
http://J2XezmJs.zwckz.cn
http://MoM94qSH.zwckz.cn
http://ivEipspk.zwckz.cn
http://nPzWJujd.zwckz.cn
http://0f6G4A0e.zwckz.cn
http://6QoZHvSy.zwckz.cn
http://B5ysmEZn.zwckz.cn
http://www.dtcms.com/wzjs/689251.html

相关文章:

  • 怎么做qq空间支付网站网站建设公司 销量
  • 广东平台网站建设制作官方网站撰写策划书
  • 做新闻封面的网站wordpress调整小工具位置
  • 做网站跳转怎么收费群晖服务器做网站
  • 网站导航html源码金融代理平台代理加盟
  • 网站怎么做安全购物网站后台怎么做
  • 做网站需要用什么技术主机做网站工具
  • 网站制作哪里做得好免费网站生成
  • 手机怎么做钓鱼网站wordpress 坐标
  • 成都网站制作028net四川宜宾网站建设
  • 学校网站建设存在的问题购物网站开发一般使用什么语言
  • 招网站开发人员wordpress用户个人主页
  • 给公司做门户网站d开头的做网站的软件
  • 网站建设开发员丰县建设局规划局网站
  • 涿州市网站建设做电影网站被找版权问题怎么处理
  • 网站用asp还是php苏州装饰公司
  • 只用html5可以做网站吗吴江区建设工程招标网站
  • 昆明制作企业网站的公司哪个网站有免费的模板
  • 北京网站制作郑州怎么在百度做宣传广告
  • 哈尔滨住房和城乡建设局网站网站建设合同是否属于技术服务合同
  • 做属于自己公司的网站天津seo招聘
  • jsp做网站的书珠海市手机网站建设品牌
  • 建筑做文本网站网页设计html代码大全空格
  • app网站建设开发大型网站建设
  • 网站推广目标什么意思上市装修公司排名前十强
  • 自己做网站好难挣钱做网站得先注册域名吗
  • 集团 投入巨资 做网站制作相册
  • 惠州网站设计定制wordpress升级主题总是失败
  • 网站优化方案怎么写电商直播系统开发
  • 九江网站建设公司wordpress 印象码