判断单链表是否为回文
来源:互联网 发布:佳能mp228清零软件 编辑:程序博客网 时间:2024/06/08 14:31
这道题很有意思,你能在O(1) space,O(n) time约束下做出来吗?
让我们来一步一步观察,思考。
回文,那么意味着是轴对称的,想到用比较最左端和最右端的方法,可是这在单链表上是根本没法做的,除非是双向链表,但题目也不允许修改数据结构啊,所以不可行。再想想,把链表逆转吧,但是逆转之后怎么办?失去了比较对象啊。再想想,那逆转一半如何?如果是回文的话,前半段和后半段就必须是一样的。好,这方法靠谱,下一步是找到中间的结点,如果结点数是奇数,则直接返回中间结点;如果为偶数,应该返回靠右的结点。这个求中间结点的代码为:
ListNode * getMiddle(ListNode *head) { ListNode *p1 = head,*p2 = head; while (p2 && p2->next) { p1 = p1->next; p2 = p2->next->next; } return p1;}
好的,然后链表逆转的算法。
ListNode * reverseLink(ListNode *head) { ListNode *p1 = nullptr; ListNode *p2 = head; while(p2){ ListNode *t = p2->next; p2->next = p1; p1 = p2; p2 = t; } return p1;}
然后,这道题就可以这么写。
bool isPalindrome(ListNode *head){ ListNode *mid = getMiddle(head); ListNode *right = reverseLink(mid); for(;head && right; head=head->next,right=right->next) { if(head->val != right->val) return false; } return true;}
嘻嘻。
0 0
- 判断单链表是否为回文
- 判断单链表是否为回文
- 判断是否为回文
- 判断是否为回文
- 判断是否为回文
- 判断是否为回文
- 判断是否为回文
- 判断是否为回文
- 判断一个单链表是否为回文
- 判断字符串是否为回文
- 判断是否为回文数
- 判断是否为回文数
- 判断字符串是否为回文
- 判断是否为回文数
- 判断是否为回文数
- 判断是否为回文数
- 判断是否为回文数
- 判断是否为回文数
- 基于opencv的疲劳驾驶检测中人脸和人眼的检测
- 乐乐音乐3.0
- 用继承(inheritance)和组合(composition)设计
- 4.1.2表达式的表示
- Matlab绘图-详细全面(图)
- 判断单链表是否为回文
- LeetCode 226. Invert Binary Tree
- 决策树中的id3算法理解
- EL表达式遍历大小写
- 【usaco 2013 Mar Bronze】种类分配
- VisualSvn Server的使用
- 快速幂+费马小定理 690D2 - The Wall (medium)CF
- HTML5与HTML4的区别
- SQL Server的触发器用法