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

视频网站做板块栏目专题页是什么

视频网站做板块栏目,专题页是什么,连锁租车网站源码,要怎么做网络推广回文链表 题目描述: 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2&#…

回文链表

题目描述:

        给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105] 内
  • 0 <= Node.val <= 9

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

方法一思路分析:

反转链表的一半

  1. 使用快慢指针找到链表的中点:快指针每次移动两步,慢指针每次移动一步,当快指针到达链表末尾时,慢指针就位于链表的中点(对于奇数个节点的链表,慢指针位于中间两个节点的第一个)。

  2. 反转链表的后半部分:从慢指针开始,反转链表的后半部分。

  3. 比较前后两部分:将反转后的后半部分与原始链表的前半部分进行比较,如果每个节点都相等,则是回文链表。

代码实现:

public class Solution {  public boolean isPalindrome(ListNode head) {  // 如果链表为空或只有一个节点,直接返回true  if (head == null || head.next == null) {  return true;  }  // 使用快慢指针找到链表的中点  ListNode slow = head;  ListNode fast = head;  ListNode prev = null;  while (fast != null && fast.next != null) {  prev = slow;  slow = slow.next;  fast = fast.next.next;  }  // 如果链表长度为奇数,则跳过中点  if (fast != null) {  slow = slow.next;  }  // 反转链表的后半部分  ListNode secondHalfHead = reverseList(slow);  // 比较前半部分和反转后的后半部分  ListNode p1 = head;  ListNode p2 = secondHalfHead;  while (p2 != null) {  if (p1.val != p2.val) {  return false;  }  p1 = p1.next;  p2 = p2.next;  }  return true;  }  // 反转链表的方法  private ListNode reverseList(ListNode head) {  ListNode prev = null;  ListNode curr = head;  while (curr != null) {  ListNode nextTemp = curr.next;  curr.next = prev;  prev = curr;  curr = nextTemp;  }  return prev;  }  
}

方法二思路分析:使用栈

        遍历链表,将遍历到的每个节点的值压入栈中。然后,再次遍历链表,同时从栈中弹出元素,比较从链表中取出的元素和从栈中弹出的元素是否相等。如果所有元素都匹配,则链表是回文的。

public class Solution {  public boolean isPalindrome(ListNode head) {  Stack<Integer> stack = new Stack<>();  ListNode curr = head;  // 遍历链表,将值压入栈  while (curr != null) {  stack.push(curr.val);  curr = curr.next;  }  // 再次遍历链表,同时从栈中弹出元素进行比较  curr = head;  while (curr != null) {  if (curr.val != stack.pop()) {  return false;  }  curr = curr.next;  }  return true;  }  
}

方法三思路分析:使用数组

        遍历链表,将遍历到的每个节点的值存储在一个数组中。然后,使用双指针技术(一个从头开始,一个从尾开始)来比较数组中的元素。这种方法的空间复杂度是O(n),其中n是链表的长度。

public class Solution {  public boolean isPalindrome(ListNode head) {  List<Integer> vals = new ArrayList<>();  ListNode curr = head;  // 遍历链表,将值存储在数组中  while (curr != null) {  vals.add(curr.val);  curr = curr.next;  }  // 使用双指针比较数组中的元素  int i = 0, j = vals.size() - 1;  while (i < j) {  if (!vals.get(i).equals(vals.get(j))) {  return false;  }  i++;  j--;  }  return true;  }  
}
http://www.yayakq.cn/news/993118/

相关文章:

  • 云南省建设厅网站舉報凡科 建设淘宝客网站
  • 茂名市建设银行网站公司对比网站
  • 做带支付功能的网站如何免费建立自己的网页
  • 专门做图片的网站有哪些正规网站备案信息表
  • 微网站建设制作设计免费广告设计制作app
  • 上海杨浦网站建设网站建设的目标与思路
  • 响应式网站开发案例创建网站的工作流程八年级信息技术
  • 网站策划的内容包含了什么?做寄生虫对自己的网站有影响吗
  • 网站上线准备工作济南官网seo技术厂家
  • 衡水做网站电话小米网站建设案例
  • 建设一个网站大概需要多久专业建设网站公司哪家好
  • php网站开发框架有哪些天王手表官方网站
  • 全屏 单页网站布吉网站建设多少钱
  • 门户网站建设原则技术支持:洛阳网站建设
  • 扬中网站建设wordpress附件上传云
  • 有什么网站可以下做闭软件网站建设未来发展前景
  • 建站工具 wordpress哪里有可以做空比特币的网站
  • 网站建设和维护管理预算江门网络推广公司
  • 微博网站开发与设计开题报告做网站有了空间在备案吗
  • 贵州建设厅施工员考试网站中小型网站建设代理商
  • 成都制作手机网站上海市住房和城乡建设部网站
  • 成都明腾网站建设公司建设自己的网站有什么
  • 做冲压件加工有什么好网站做网站公司流程
  • 怎样注册网站域名深圳建网页
  • 网站怎么分类中职网站建设与管理专业
  • 建一个淘宝客网站要多少钱网站建设是怎么赚钱的
  • 仙游县建设局网站佛山营销网站设计
  • 网上免费网站的域名快速建站全流程详细指导手册
  • 福州集团网站建设用php做图书管理网站
  • 杭州软件开发公司网站龙凤网站建设云聚达