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

网站建设设计理念中国网络营销论坛

网站建设设计理念,中国网络营销论坛,淘宝客导购网站建设?,酒店类的电影网站模板免费下载目录 1.leetcode-82. 删除排序链表中的重复元素 II#xff08;1#xff09;题目描述#xff08;2#xff09;方法及思路#xff08;一次遍历#xff09;#xff08;3#xff09;代码实现 2.leetcode-19. 删除链表的倒数第 N 个结点#xff08;1#xff09;题目描述1题目描述2方法及思路一次遍历3代码实现 2.leetcode-19. 删除链表的倒数第 N 个结点1题目描述2方法一双指针3方法二计算链表长度最直观4方法三栈 3.leetcode-83. 删除排序链表中的重复元素1题目描述2方法及思路一次遍历3代码实现 4.leetcode-86. 分隔链表1题目描述2方法及思路模拟3代码实现 5.leetcode-25. K 个一组翻转链表较难1题目描述2方法及思路模拟3代码实现 1.leetcode-82. 删除排序链表中的重复元素 II 1题目描述 给定一个已排序的链表的头 head 删除原始链表中所有重复数字的节点只留下不同的数字 。返回 已排序的链表 。 2方法及思路一次遍历 1.我们从指针 prev 指向链表的哑节点随后开始对链表进行遍历。 2.如果当前 cur与 cur.next对应的元素相同那么我们就需要将 cur 以及所有后面拥有相同元素值的链表节点全部删除。 3.我们记下这个元素值 随后不断将 cur从链表中移除 4.如果cur与cur-next对应的元素不相同则将prev指向cur所在位置cur继续往下找。 5.当遍历完整个链表之后我们返回链表的的哑节点的下一个节点 dummy.next即可。 注意哑节点可以不用考虑head就被删的特殊情况 3代码实现 class Solution { public:ListNode* deleteDuplicates(ListNode* head) {if(headNULL){return NULL;}ListNode* newnodenew ListNode(0);ListNode* prevnewnode;prev-nexthead;ListNode* curhead;while(cur!NULLcur-next!NULL){if(cur-valcur-next-val){int valcur-val;while(cur ! NULL cur-val val){cur cur-next;}prev-nextcur;}else{prevcur;curcur-next;}}return newnode-next;} };2.leetcode-19. 删除链表的倒数第 N 个结点 1题目描述 给你一个链表删除链表的倒数第 n 个结点并且返回链表的头结点。 2方法一双指针 思路 1.先定义一个first指针由于要删掉倒数第n个节点所以可以让first指针先走n步。 2.当first走完在定义一个second指针此时两指针一起走当first走到尾部时second就走到了要删掉的节点的前一位。 3.将second所在节点指向它下一位的下一位即可删掉 注意点first和second从哪里开始走first的终止条件是哪里 first从head出发终止条件是走到空停止 而对于second与第一题中一样引入哑节点second从此处开始走 代码实现 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* newnodenew ListNode(0,head);ListNode* curhead;while(n0){curcur-next;n--;}ListNode* prevnewnode;while(cur){prevprev-next;curcur-next;}prev-nextprev-next-next;return newnode-next;} };3方法二计算链表长度最直观 思路 一种容易想到的方法是我们首先从头节点开始对链表进行一次遍历得到链表的长度 L。随后我们再从头节点开始对链表进行一次遍历当遍历到第 L−n1 个节点时它就是我们需要删除的节点。 代码实现 class Solution { public:int getLength(ListNode* head) {int length 0;while (head) {length;head head-next;}return length;}ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy new ListNode(0, head);int length getLength(head);ListNode* cur dummy;for (int i 1; i length - n 1; i) {cur cur-next;}cur-next cur-next-next;ListNode* ans dummy-next;delete dummy;return ans;} };4方法三栈 思路 我们也可以在遍历链表的同时将所有节点依次入栈。根据栈「先进后出」的原则我们弹出栈的第 n 个节点就是需要删除的节点并且目前栈顶的节点就是待删除节点的前驱节点。这样一来删除操作就变得十分方便了。也就是只要找到就直接操作 代码实现 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy new ListNode(0, head);stackListNode* stk;ListNode* cur dummy;while (cur) {stk.push(cur);cur cur-next;}for (int i 0; i n; i) {stk.pop();}ListNode* prev stk.top();prev-next prev-next-next;ListNode* ans dummy-next;delete dummy;return ans;} };3.leetcode-83. 删除排序链表中的重复元素 1题目描述 给定一个已排序的链表的头 head 删除所有重复的元素使每个元素只出现一次 。返回 已排序的链表 。 2方法及思路一次遍历 思路具体地我们从指针 cur\textit{cur}cur 指向链表的头节点随后开始对链表进行遍历。如果当前 cur 与 cur.next 对应的元素相同那么我们就将 cur.next 从链表中移除否则说明链表中已经不存在其它与 cur 对应的元素相同的节点因此可以将 cur 指向 cur.next。 3代码实现 class Solution { public:ListNode* deleteDuplicates(ListNode* head) {if (!head) {return head;}ListNode* cur head;while (cur-next) {if (cur-val cur-next-val) {cur-next cur-next-next;}else {cur cur-next;}}return head;} };4.leetcode-86. 分隔链表 1题目描述 给你一个链表的头节点 head 和一个特定值 x 请你对链表进行分隔使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 2方法及思路模拟 思路 直观来说我们只需维护两个链表 small 和 large 即可small 链表按顺序存储所有小于 x 的节点large 链表按顺序存储所有大于等于 x的节点。遍历完原链表后我们只要将 small 链表尾节点指向 large 链表的头节点即能完成对链表的分隔。 1.先定义两个哨兵位smallHead和largeHead这样做的目的是为了更方便地处理头节点为空的边界条件。 2.遍历链表找出小的储存进small大的储存进large 3.合并链表时注意large节点的指向并注意要删除largeHead 3代码实现 class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode* smallnew ListNode(0);ListNode* smallHeadsmall;ListNode* largenew ListNode(0);ListNode* largeHeadlarge;while(head!NULL){if(head-valx){small-nexthead;smallsmall-next;}else{large-nexthead;largelarge-next;}headhead-next;}large-nextNULL;small-nextlargeHead-next;delete largeHead;return smallHead-next;} };5.leetcode-25. K 个一组翻转链表较难 1题目描述 给你链表的头节点 head 每 k 个节点一组进行翻转请你返回修改后的链表。 k 是一个正整数它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值而是需要实际进行节点交换。 2方法及思路模拟 思路 1.首先按照k来进行分组每k个会重新是一个head。 2.然后对每k个数进行反转链表。 3.反转完链表要注意头和尾与前后的相连所以在实现反转链表的函数中还要返回头和尾 4.遍历到最后时如果个数少于k就直接返回 3代码实现 首先先实现部分链表反转部分 pairListNode*,ListNode* myReserve(ListNode* head,ListNode* tail){ListNode* prevtail-next;ListNode* phead;while(prev!tail){ListNode* nexp-next;p-nextprev;prevp;pnex;}return {tail,head};}总体部分实现 1.在每次实现完注意要有个prev在head前一开始就是哨兵位prev用来与反转完的部分进行连接。prev更新的位置即使在tail处新head前 2.还要定义一个next在反转链表之前也就是在找到新tail时定义在他的后面用于反转部分尾部的连接 ListNode* reverseKGroup(ListNode* head, int k) {ListNode* hairnew ListNode(0);hair-nexthead;ListNode* prehair;while(head){ListNode* tailpre;for (int i 0; i k; i) {tail tail-next;if (!tail) {return hair-next;}}ListNode* nexttail-next;pairListNode*,ListNode* resultmyReserve(head,tail);headresult.first;tailresult.second; pre-nexthead;tail-nextnext;pretail;headtail-next;}return hair-next;}
http://www.pierceye.com/news/221701/

相关文章:

  • 360网站收录做网站设计用什么软件
  • 微信html5模板网站最新网站建设软件有哪些
  • 芝麻开门网站建设无极电影网怎样下载电影
  • 网站开发 书籍首页关键词优化价格
  • 网站建设建站流程方案百度一下你就知道下载安装
  • 大型网站快速排名学生做的网站能攻击
  • 怎样做加入购物车的网站wordpress SQL 配置
  • 网站设计原型品牌建设人才队伍建设
  • 常熟网站网站建设电商购物平台软件开发
  • 网站页尾信息网站建设费用摊销年限
  • 制作个人网站要多少钱重庆工程信息官网
  • 那里建设网站好珠海网站建设公司哪个好
  • 从化市营销型网站建设工业和信息化部五系网站建设
  • 网站建设的开发方法有哪些wordpress 企业站主题
  • 长治网站建设案例找人做一个小网站需要多少钱
  • html5 网站布局应用教程韩雪冬 网站
  • 行业网站维护印刷公司网站模板
  • 做自媒体需要用的网站wordpress更换语言包
  • 电子书推送网站怎么做重庆产品网站推广
  • 免费做课设的网站织梦本地安装网站
  • 龙岗做网站公司szaow品牌网站建设公司哪好
  • 设计网站项目描述怎么样下载网页上的视频
  • 比较开放的浏览器清远网站seo
  • 个人网站的域名注册怎么做手机app软件开发
  • 卡盟网站开发google play三件套
  • 缠绕机东莞网站建设技术支持在线协同办公软件
  • 邵阳做网站哪个公司好接推广网站
  • 媒体网站模版网站添加提醒
  • 平度网站建设公司电话制作动画网站模板
  • 教育手机网站开发郑州网站修改建设