思路:
想法1:快慢指针遍历一遍字符串得到字符串长度以及中间结点的位置,然后对后半部分链表反转,最后从头比较前半部分链表和反转后的后半部分链表;
想法2:利用栈先进后出和函数参数引用来对字符串进行递归比较!

#include <iostream>
#include <vector>
#include <queue>
using namespace std;struct ListNode
{int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};void check(ListNode *head1, int l, ListNode *&head2, int r, bool &flag) //判断链表[l~r]是否为回文  (注意head2是变化的 它要一次次往后走 一定要引用)
{if (l >= r){return;}if (r - l >= 2){check(head1->next, l + 1, head2, r - 1, flag);}int a = head1->val, b = head2->val;if (a != b){flag = false;}//head2指向下一个结点,此时该函数完成返回其调用函数时,head1也指向前一个结点,这样又能比较两个数是否相等了head2 = head2->next;
}bool isPalindrome(ListNode *head)
{//如果有1个及以下的元素,返回trueif (head == nullptr || head->next == nullptr){return true;}//利用快慢指针求链表个数和中间节点int size = 0;ListNode *slow = head, *fast = head, *mid_point = nullptr;while (fast){ //find mid nodesize++;slow = slow->next;fast = fast->next ? fast->next->next : fast->next;}mid_point = slow;while (slow){size++;slow = slow->next;}bool flag = true;check(head, 1, mid_point, size, flag);return flag;
}//之前的思路:    其一,find mid node 使用快慢指针找到链表中点。 其二,reverse 逆序后半部分。 其三,check 从头、中点,开始比较是否相同。
// bool isPalindrome(ListNode* head) {//O(n)、O(1)
//     ListNode* slow = head, *fast = head,  *prev = nullptr;
//     while (fast){//find mid node
//         slow = slow->next;
//         fast = fast->next ? fast->next->next: fast->next;
//     }
//     while (slow){//reverse
//         ListNode* temp = slow->next;
//         slow->next = prev;
//         prev = slow;
//         slow = temp;
//     }
//     while (head && prev){//check
//         if (head->val != prev->val){//             return false;
//         }
//         head = head->next;
//         prev = prev->next;
//     }
//     return true;
// }int main()
{ListNode *a1 = new ListNode(1);ListNode *a2 = new ListNode(2);ListNode *a3 = new ListNode(2);ListNode *a4 = new ListNode(1);a1->next = a2;a2->next = a3;a3->next = a4;cout << isPalindrome(a1);return 0;
}

Leetcode每日一题:234.palindrome-linked-list(回文链表)相关推荐

  1. [LeetCode] 234. Palindrome Linked List 回文链表

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...

  2. 234. Palindrome Linked List 回文链表

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复 ...

  3. leetcode python3 简单题234. Palindrome Linked List

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百三十四题 (1)题目 英文: Given a singly linked li ...

  4. Leetcode每日一题:125.valid-palindrome(验证回文串)

    思路:这一题常规的想法是开辟一个新的字符串ss,然后遍历s时,把字母或者数字放入ss,然后对ss进行判断:但实际上ss这个数组没必要开,因为s有效的部分必小于等于s的长度,所以直接对s进行处理就行: ...

  5. LeetCode Palindrome Linked List (回文链表)

    题意:给个单链表,判断是否为回文. 思路:有点BT,处理不好都是死循环.一般思路是,二分查找中心点,根据奇偶个元素,反置前半部分,再判断是否回文,再恢复前半部分. 步骤: (1)在二分查找中心点时判断 ...

  6. leetCode第五题-求字符串最长回文字符串

    原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...

  7. leetcode 高薪_利用两种不同的方法解LeetCode第1312题:让字符串成为回文串的最少插入次数

    题目描述(难度困难) 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符.请你返回让 s 成为回文串的 最少操作次数 . 「回文串」是正读和反读都相同的字符串. 示例 1: 输入: ...

  8. Leetcode每日一题:206.reverse-linked-list/solution(反转链表)

    思路:这题还是比较容易的,递归和迭代复杂度仅为O(n): // 递归版 struct ListNode {int val;ListNode *next;ListNode(int x) : val(x) ...

  9. Leetcode每日一题:23.merge-k-sorted-lists(合并K个排序链表)

    这一题我的解也不好意思说出口,把所有值装入变长数组,排序,再转换成链表 复杂度应该在O(nlogn) 开销处于中流水平 评论中的 分治法(二分递归) 最小堆(C++优先队列实现) 着实没想到 stru ...

  10. Leetcode每日一题:203.remove-linked-list-elements(移除链表元素)

    思路:先利用一个while 将head指向第一个不为val的结点,随后对head->next进行判断,若值为val,则用一个循环跳过之间所有连续的值为val的结点,然后继续对head->n ...

最新文章

  1. linux安装jdk教程
  2. python中append函数合并列表且列表内数字从高到低_35个高级Python知识点总结
  3. 常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,
  4. Spring Boot Jpa多数据源配置
  5. 线性判别分析LDA的数学原理(一)
  6. SkyWalking学习笔记(CentOS环境)
  7. 正则表达式过滤文本,replace的使用
  8. Go的http库详解
  9. 2018网易在线笔试题
  10. keepalived高可用LVS与Nginx
  11. HTML5期末大作业:我的家乡网站设计——可以根据百度百科更换家乡适用多数我的家乡
  12. MT【276】正切的半角公式
  13. python请输入一个三位数输出该三位数的逆序数_编写程序,从键盘输入一个三位数,求出其逆序数并输出,例如输入123,输出321。...
  14. mysql数据库之mmm
  15. 浦发银行c语言上机试题,浦发银行通信技术类招考笔试经验
  16. 几何分布期望与方差推导
  17. H5页面微信自动登录,和微信页面自定义分享样式
  18. 5分钟教你掌握异常检测方法
  19. 简书android des,Android 加密之DES加密
  20. 抖音seo搜索是什么?源码部署-seo排名系统源码分析

热门文章

  1. Python基础(四)函数
  2. 模式三工厂——开花结果
  3. 关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例
  4. 方法对象Spring MVC SimpleFormController
  5. (转)一步一步Asp.Net MVC系列_权限管理之权限控制
  6. [HDU] 1533 Going Home
  7. Json.Net学习笔记(十二) 协议解析
  8. [POJ1961 Period]
  9. MyBatis学习总结_Mybatis查询之resultMap和resultType区别
  10. cookie、localStorage和sessionStorage三者的异同