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

江西医疗网站建设百度搜索风云榜总榜

江西医疗网站建设,百度搜索风云榜总榜,做响应式网站制作,苏州旅游攻略题目描述给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 示例 1:输入:head [1,2,2,1] 输出:true示例 2:输入:head […

题目描述

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

示例 1:

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

示例 2:

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

解题思路

1.栈+双指针

大致思路:使用双指针定位中心元素并将链表前半部分入栈,挨个出栈并遍历后半部分做比较,如果不想等则为false;

class Solution {public boolean isPalindrome(ListNode head) {if (head == null || head.next == null) {return true;}// 使用快慢指针找到链表中点ListNode slow = head;ListNode fast = head;LinkedListStack<Integer> stack = new LinkedListStack<>();// 将前半部分入栈while (fast != null && fast.next != null) {stack.push(slow.val);slow = slow.next;fast = fast.next.next;}// 如果链表长度是奇数,跳过中间节点if (fast != null) {slow = slow.next;}// 比较后半部分和栈中元素while (slow != null) {if (stack.pop() != slow.val) {return false;}slow = slow.next;}return true;}
}public class LinkedListStack<T> {// 定义链表节点private static class Node<T> {T data;Node<T> next;Node(T data) {this.data = data;this.next = null;}}private Node<T> top; // 栈顶节点private int size;    // 栈的大小public LinkedListStack() {top = null;size = 0;}// 入栈操作public void push(T item) {Node<T> newNode = new Node<>(item);newNode.next = top; // 新节点的next指向原来的栈顶top = newNode;     // 更新栈顶为新节点size++;}// 出栈操作public T pop() {if (isEmpty()) {throw new IllegalStateException("Stack is empty");}T item = top.data;  // 获取栈顶数据top = top.next;     // 栈顶指向下一个节点size--;return item;}// 判断栈是否为空public boolean isEmpty() {return top == null;}
}

 2.反转链表+双指针

class Solution {public boolean isPalindrome(ListNode head) {if (head == null || head.next == null) return true;// 1. 快慢指针找中点ListNode slow = head, fast = head;while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}// 2. 反转后半部分ListNode reversedSecondHalf = reverse(slow);// 3. 比较前后两部分ListNode p1 = head, p2 = reversedSecondHalf;boolean isPalindrome = true;while (p2 != null) {if (p1.val != p2.val) {isPalindrome = false;break;}p1 = p1.next;p2 = p2.next;}return isPalindrome;}private ListNode reverse(ListNode head) {//prev指向反转后链表的最后一个 初始为null  curr指向要反转的那个节点,从head开始ListNode prev = null, curr = head;while (curr != null) {//将反转的下一个节点先记录下来ListNode next = curr.next;//使用头插法curr.next = prev;//将当前反转的节点设置为反转后节点的最后一个prev = curr;//反转下一个节点curr = next;}return prev;}
}

http://www.dtcms.com/wzjs/441703.html

相关文章:

  • php和asp做网站哪个好网站seo技术
  • 张家港做网站收费标准百度推广登录平台客服
  • 如何用dw做网站地图磁力天堂最新版地址
  • wordpress 安全性网站优化最为重要的内容是
  • 做网站主页图片一般多少mseo网站排名优化软件
  • 网站可以自己做吗做一个简单的网站需要多少钱
  • 各地民营企业创新前行东莞seo优化团队
  • asp.net做的网站文字控件随窗口大小不变化seo技术培训唐山
  • 关于电器网站建设的法律免费百度下载
  • html5 手机网站开发叫才seo 推广怎么做
  • 山西省网站制作优化设计全部答案
  • 网站用户管理系统永久不收费的软件app
  • 网络技术工程师网站推广优化排名教程
  • 关于建设网站的合作合同开封网络推广哪家好
  • 网站建设制作设计营销 大连seo少女
  • 直播短视频推广网站排名怎么优化
  • b站大全永不收费免费下载软件吗最新新闻事件今天国内大事
  • 西安优惠电商平台网站关键词代发排名首页
  • 高端房产网站建设深圳网站设计公司哪家好
  • 河南第二建设集团网站视频上海百度seo点击软件
  • loft设计方案seo产品优化推广
  • 广州公司建设网站批量优化网站软件
  • 关于公司申请建设门户网站的请示看片子用什么app免费苹果手机
  • 横屏滚动网站外贸网站优化
  • 建设银行官网首页网站公告百度seo学院
  • win7系统做网站服务器系统谷歌搜索引擎为什么打不开
  • 石家庄信息门户网站制作费用aso优化重要吗
  • 做的比较好的b2b网站下载安装百度
  • 姜堰网站建设泽成seo网站排名
  • 有哪些网站的搜索引擎推广网络推广平台