力扣 234. 回文链表
创始人
2024-02-11 11:03:31
0

力扣 234. 回文链表

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

示例 1:

img

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

示例 2:

img

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

提示:

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

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

两种解法

  • 将链表值存储到数组中,数组双指针判断
  • 找到链表中间结点(快慢指针),反转链表后半段(迭代),然后比较

数组双指针

  • 时间复杂度 O(n)
  • 空间复杂度 O(n)

这个解法算是思路简单,而且时间复杂夫和空间复杂度相对也还可以

/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @return {boolean}*/
var isPalindrome = function(head) {let list = [];while(head != null) {list.push(head.val);head = head.next;}for(let i = 0, j = list.length - 1; i <= j; i++, j--) {if(list[i] != list[j])return false;}return true;
};

反转后半段链表比较

  • 时间复杂度 O(n)
  • 空间复杂度 O(1)

这个解法我感觉挺好的,主要就是有两个点吧:

找到中间结点:快慢指针,快指针每次跳两个结点, 慢指针一次跳一个结点,注意兼容链表奇偶个数

反转链表:考虑到性能优化, 用迭代算法反转以减小空间复杂度

/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @return {boolean}*/var reverseList = function(head) {// 迭代反转链表if(head == null || head.next == null) {return head;}let pre = null, cur = head;while(cur != null) {let next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;
}var midNode = function(head) {let front = head;let slow = head;while(front.next != null && front.next.next != null) {front = front.next.next;slow = slow.next;}return slow;
}var isPalindrome = function(head) {// 快慢指针确定中间结点,反转后半段链表比较if(head.next == null) {return true;}let mid = midNode(head);let endlist = reverseList(mid.next);let n = head;let scendn = endlist;while(scendn != null) {if(n.val != scendn.val) {return false;}scendn = scendn.next;n = n.next;}return true;
};

仅供参考,欢迎交流学习

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...