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

中国制造网入驻搜索引擎优化策略不包括

中国制造网入驻,搜索引擎优化策略不包括,建设网站怎么添加端口映射,网站上的文章做参考文献19. 删除链表的倒数第 N 个结点 给你一个链表#xff0c;删除链表的倒数第 n 个结点#xff0c;并且返回链表的头结点。 此题目为链表题#xff0c;拿出我们的杀手锏#xff0c;链表解题经典三把斧#xff1a; 哑巴节点栈快慢指针 关于内存问题#xff1a;由于Swift及…19. 删除链表的倒数第 N 个结点 给你一个链表删除链表的倒数第 n 个结点并且返回链表的头结点。 此题目为链表题拿出我们的杀手锏链表解题经典三把斧 哑巴节点栈快慢指针 关于内存问题由于Swift及OC均有ARC内存机制因此删除的节点内容未主动释放如在手动内存管理的情况下需要释放被删除节点的内存占用。 方法一、计算链表长度 先求出链表长度L再将链表从头移动到L-n1的位置删除其下一个节点。 时间复杂度O(n)一次求长度n极端情况下的一次遍历2n-O(n) 空间复杂度O(1) Swift //计算链表长度, 删除l-n1的位置 func removeNthFromEnd(_ head: ListNode?, _ n: Int) - ListNode? {let dummyNode ListNode(0, head);let len getLenOfListNode(head)var current:ListNode? dummyNodefor _ in 1..len-n1 {current current?.next}current?.next current?.next?.next//MRC Or ARC被释放的节点内存需要处理吗let ans dummyNode.nextreturn ans}func getLenOfListNode(_ listNode:ListNode?) - Int {var len 0var current listNodewhile let cur current {current cur.nextlen 1}return len}OC //计算链表长度, 删除l-n1的位置 - (ListNodeOC *)removeNthFromEnd:(ListNodeOC *)head atReverseIdx:(NSInteger)n {//构造虚拟头节点ListNodeOC *dummyNode [[ListNodeOC alloc] initWithVal:0 next:head];NSInteger len [self lenOfListNode:head];ListNodeOC *cur dummyNode;for (NSInteger i1; ilen-n1; i) {cur cur.next;}cur.next cur.next.next;return dummyNode.next; }解法二、栈 先将链表入栈再出栈n个元素后栈顶部的元素就是我们需要删除的节点的前一个节点。 时间复杂度O(n) 空间复杂度O(n) Swift //入栈后弹栈n次即可func removeNthFromEnd(_ head: ListNode?, _ n: Int) - ListNode? {//构造影子节点let fickNode ListNode(0)fickNode.next headlet stack StackListNode()var cur:ListNode? fickNodewhile let currentNode cur {stack.push(currentNode)cur currentNode.next}for _ in 0..n {let _ stack.pop()}if let preNode stack.top() {preNode.next preNode.next?.next}return fickNode.next}OC - (ListNodeOC *)removeNthFromEnd:(ListNodeOC *)head atReverseIdx:(NSInteger)n {ListNodeOC *dummyNode [[ListNodeOC alloc] initWithVal:0 next:head];StackOC *stack [[StackOC alloc] init];//先入栈ListNodeOC *cur dummyNode;while (cur) {[stack push:cur];cur cur.next;}//出栈n个元素for (NSInteger i0; in; i) {[stack pop];}//删除最后一个元素cur [stack top];cur.next cur.next.next;[stack cleanAll];return dummyNode.next; }双指针 创建哑巴节点有两个指针均指向哑巴节点首先移动第2个指针n次此时第1、2个指针相距n个节点然后同时移动1、2两个节点直至第2个指针指向最后一个元素此时的第1个指针指向的节点就是倒数第n个元素的前一个元素。 时间复杂度O(n) 空间复杂度O(1) Swift func removeNthFromEnd(_ head: ListNode?, _ n: Int) - ListNode? {//构造影子节点为指针操作预留空间let dummyNode ListNode(0, head)var first:ListNode? dummyNodevar second:ListNode? dummyNodevar current:ListNode? dummyNodefor _ in 0..n {if let cur current {second cur.nextcurrent second}}//同时移动两个指针,直至2到达结尾while let _ current?.next {first first?.nextsecond second?.nextcurrent second}first?.next first?.next?.nextreturn dummyNode.next}OC - (ListNodeOC *)removeNthFromEnd:(ListNodeOC *)head atReverseIdx:(NSInteger)n {ListNodeOC *dummyNode [[ListNodeOC alloc] initWithVal:0 next:head];ListNodeOC *firstNode dummyNode;ListNodeOC *secondNode dummyNode;//先移动指针让两个指针差值为nfor (NSInteger i0; in; i) {secondNode secondNode.next;}//同时移动两个指针当第二个指针指向最后一个元素的时候第一个指针指向的正是倒数第n个元素while (secondNode.next) {firstNode firstNode.next;secondNode secondNode.next;}firstNode.next firstNode.next.next;return dummyNode.next; }
http://www.pierceye.com/news/590748/

相关文章:

  • 十堰秦楚网 十堰新闻门户网站wordpress 点赞 开启
  • 做外贸网站需要注意些什么手续安阳吧贴吧
  • 国外申请域名的网站百度标记号码认证平台
  • 专门做淘宝代运营的网站支付建设网站的费用什么科目
  • 天津企业设计网站建设建个网站做外贸
  • 申请永久网站空间wordpress论坛采集
  • 网站如何做竞价佛山新网站建设机构
  • 网站建设费可以一次性冲费用吗学校门户网站作用
  • 手机上怎么制作网站音乐网站如何建立
  • 新乡企业网站建设公司寮步东莞网站建设
  • wordpress中国网站排名如何加入广告联盟赚钱
  • 济宁网站建设培训学校wordpress导入表单
  • 做农产品交易网站阿里云已备案域名购买
  • 免费建站网站一级大录像不卡谁给我一个企业邮箱认证
  • 中国做网站东台做网站公司
  • 建设数据库网站需要哪些设备wordpress多功能主题 cosy
  • 苏州市郭巷建设局网站一家专门做鞋子的网站
  • 光明网站建设网站建设成果
  • 商业网站建设举例宝塔做两个网站6
  • 网站优化排名分享隐迅推前端开发入门培训
  • 曲周县建设局网站东莞保安公司电话
  • 合肥商城网站建设多少钱wordpress页面代码怎么改
  • 前期做网站宣传费用怎样做账企业网站建设的劣势
  • 网站建设企业哪家好做网站三大主流框架
  • 网站托管服务方案珲春建设局网站
  • 开发网站公司收入重庆多功能网站建设
  • 河北手机网站建设上海网站seo招聘
  • 厦门市建设局思明建设分局官方网站在谷歌上做外贸网站有用吗
  • 网站开发手机自适应直接在原备案号下增加新网站
  • 公司网站建设安全的风险网络工程师app