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

韩国做网站网站违法不丹灶网站制作

韩国做网站网站违法不,丹灶网站制作,excel可以制作网页吗,网站代码怎么查看文章目录 一、题目二、C# 题解 一、题目 编写一个函数,检查输入的链表是否是回文的。 点击此处跳转题目。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true …

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  编写一个函数,检查输入的链表是否是回文的。

  点击此处跳转题目。

示例 1:

输入: 1->2
输出: false

示例 2:

输入: 1->2->2->1
输出: true

进阶:

  • 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

二、C# 题解

  使用 O ( n ) O(n) O(n) 空间很容易写出来,只需要开辟一个数组或者反向链表即可。这里为了实现进阶要求,在原链表上修改。首先将链表的前半部分翻转,然后比较前后两个链表是否相同,最后恢复原链表即可,具体实现细节见代码注释:

/*** Definition for singly-linked list.* public class ListNode {*     public int val;*     public ListNode next;*     public ListNode(int x) { val = x; }* }*/
public class Solution {public bool IsPalindrome(ListNode head) {int n = 0, i;ListNode p = head, q;bool result;// 统计链表长度while (p != null) {p = p.next;n++;}if (n <= 1) return true;    // 长度 <= 1,一定是回文串i = n / 2;                  // 长度的一半,向下取整p = head;while (--i > 0) p = p.next; // 定位到链表中间q = p.next;p.next = null;              // 断开链表Reverse(head);              // 翻转前半部分// 判断链表前后两部分是否相同if (n % 2 == 0) result = Same(p, q);else result = Same(p, q.next); // 奇数长度的链表需要跳过最中间的元素// 恢复链表原状Reverse(p);p.next = q;return result;}// 翻转链表public ListNode Reverse(ListNode head) {ListNode p = null, q = head, r;while (q != null) {r = q.next;q.next = p;p = q;q = r;}return p;}// 比较两个链表是否相同public bool Same(ListNode h1, ListNode h2) {while (h1 != null && h2 != null) {if (h1.val != h2.val) return false;h1 = h1.next;h2 = h2.next;}return h1 == null && h2 == null;}
}
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

  看了一下官方解法,发现还可以进行优化。使用快慢指针定位到中间节点,代码会更加高级和优雅hh。但是效率和上面统计长度然后遍历一半进行定位的方式差不多,因为都是遍历了一个半链表(快指针遍历整个链表,慢指针遍历半个链表),但是快慢指针这种方法它显得高级呀哈哈!

/*** Definition for singly-linked list.* public class ListNode {*     public int val;*     public ListNode next;*     public ListNode(int x) { val = x; }* }*/
public class Solution {public bool IsPalindrome(ListNode head) {if (head == null || head.next == null) return true;ListNode p = head, q = p.next; // p:慢指针,q:快指针bool result;while (q != null && q.next != null) {q = q.next.next;           // q 前进两格if (q != null) p = p.next; // q 不为空,p 才前进}ListNode r = p.next;           // 定位到后半段链表的首部p.next = null;                 // 断开链表Reverse(head);                 // 翻转前半部分// 判断链表前后两部分是否相同if (q != null) result = Same(p, r);else result = Same(p, r.next); // 奇数长度的链表需要跳过最中间的元素// 恢复链表原状Reverse(p);p.next = r;return result;}// 翻转链表public ListNode Reverse(ListNode head) {ListNode p = null, q = head, r;while (q != null) {r = q.next;q.next = p;p = q;q = r;}return p;}// 比较两个链表是否相同public bool Same(ListNode h1, ListNode h2) {while (h1 != null && h2 != null) {if (h1.val != h2.val) return false;h1 = h1.next;h2 = h2.next;}return h1 == null && h2 == null;}
}
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

  修改过后,发现快慢指针跑出来的速度不如直接统计链表长度来得快。果然,高端的代码往往以最朴素的方法写出来~

http://www.yayakq.cn/news/840995/

相关文章:

  • 3分钟搞定网站seo优化外链建设海南省交通建设局网站首页
  • 北京首都功能优化谷歌seo网站优化
  • 网站建设技术风险网络培训视频如何快速完成
  • 行业网站做的好的安徽建设工程网
  • 腾讯新闻最新消息杭州百度优化
  • 做网站代理凡科互动网页版
  • 建设网站需要什么技术人员女性手表网站
  • 做好的网站怎么链接服务器做多个网站
  • 嘉兴哪里做网站百度竞价推广价格
  • 周口网站建设 网站制作 网络推广找logo的网站
  • PHP网站建设选择哪家好wordpress接入公众号
  • 做ppt网站有哪些内容怎样开电商
  • 英文网站建设方案详细方案小微企业生产管理软件
  • 网站建设公司小猫建站公众号购物做网站还是小程序
  • 网站推广seo教程wordpress html5
  • 网站的主页按钮怎么做h5制作软件没有广告
  • 苏州技术馆网站建设太原网站关键词推广
  • 万网主体新增网站备案需要是滴么哪些网站可以免费做推广
  • 做网站和做系统有什么不同程序员做图网站
  • 潍坊网站建设团队网站备案未注销 影响
  • 比较流行的sns营销网站重庆市造价信息网官网
  • 汕头网站设计电话广告网站设计哪家快
  • 个人网站备案与企业备案wordpress柒比貳
  • 微商软件商城24小时落实20条优化措施
  • 网站开发工程师的生活形态搜索引擎网站排名
  • 济南建站培训建设工程合同包括
  • 网站开发与建设方向网站建设咨询话术技巧
  • 中企动力和东莞朝阳做的网站对比广东品牌女装都有哪些品牌
  • 做推广比较好的网站十大免费建站app
  • 凡科网站怎么修改昨天做的网站银川网站建站公司