Leetcode每日一题:234.palindrome-linked-list(回文链表)
思路:
想法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(回文链表)相关推荐
- [LeetCode] 234. Palindrome Linked List 回文链表
Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...
- 234. Palindrome Linked List 回文链表
请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复 ...
- leetcode python3 简单题234. Palindrome Linked List
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百三十四题 (1)题目 英文: Given a singly linked li ...
- Leetcode每日一题:125.valid-palindrome(验证回文串)
思路:这一题常规的想法是开辟一个新的字符串ss,然后遍历s时,把字母或者数字放入ss,然后对ss进行判断:但实际上ss这个数组没必要开,因为s有效的部分必小于等于s的长度,所以直接对s进行处理就行: ...
- LeetCode Palindrome Linked List (回文链表)
题意:给个单链表,判断是否为回文. 思路:有点BT,处理不好都是死循环.一般思路是,二分查找中心点,根据奇偶个元素,反置前半部分,再判断是否回文,再恢复前半部分. 步骤: (1)在二分查找中心点时判断 ...
- leetCode第五题-求字符串最长回文字符串
原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...
- leetcode 高薪_利用两种不同的方法解LeetCode第1312题:让字符串成为回文串的最少插入次数
题目描述(难度困难) 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符.请你返回让 s 成为回文串的 最少操作次数 . 「回文串」是正读和反读都相同的字符串. 示例 1: 输入: ...
- Leetcode每日一题:206.reverse-linked-list/solution(反转链表)
思路:这题还是比较容易的,递归和迭代复杂度仅为O(n): // 递归版 struct ListNode {int val;ListNode *next;ListNode(int x) : val(x) ...
- Leetcode每日一题:23.merge-k-sorted-lists(合并K个排序链表)
这一题我的解也不好意思说出口,把所有值装入变长数组,排序,再转换成链表 复杂度应该在O(nlogn) 开销处于中流水平 评论中的 分治法(二分递归) 最小堆(C++优先队列实现) 着实没想到 stru ...
- Leetcode每日一题:203.remove-linked-list-elements(移除链表元素)
思路:先利用一个while 将head指向第一个不为val的结点,随后对head->next进行判断,若值为val,则用一个循环跳过之间所有连续的值为val的结点,然后继续对head->n ...
最新文章
- linux安装jdk教程
- python中append函数合并列表且列表内数字从高到低_35个高级Python知识点总结
- 常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,
- Spring Boot Jpa多数据源配置
- 线性判别分析LDA的数学原理(一)
- SkyWalking学习笔记(CentOS环境)
- 正则表达式过滤文本,replace的使用
- Go的http库详解
- 2018网易在线笔试题
- keepalived高可用LVS与Nginx
- HTML5期末大作业:我的家乡网站设计——可以根据百度百科更换家乡适用多数我的家乡
- MT【276】正切的半角公式
- python请输入一个三位数输出该三位数的逆序数_编写程序,从键盘输入一个三位数,求出其逆序数并输出,例如输入123,输出321。...
- mysql数据库之mmm
- 浦发银行c语言上机试题,浦发银行通信技术类招考笔试经验
- 几何分布期望与方差推导
- H5页面微信自动登录,和微信页面自定义分享样式
- 5分钟教你掌握异常检测方法
- 简书android des,Android 加密之DES加密
- 抖音seo搜索是什么?源码部署-seo排名系统源码分析
热门文章
- Python基础(四)函数
- 模式三工厂——开花结果
- 关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例
- 方法对象Spring MVC SimpleFormController
- (转)一步一步Asp.Net MVC系列_权限管理之权限控制
- [HDU] 1533 Going Home
- Json.Net学习笔记(十二) 协议解析
- [POJ1961 Period]
- MyBatis学习总结_Mybatis查询之resultMap和resultType区别
- cookie、localStorage和sessionStorage三者的异同