234. Palindrome Linked List回文链表
来源:互联网 发布:淘宝店铺运营外包 编辑:程序博客网 时间:2024/05/16 08:58
回文是指从前往后读和从后往前读是一样的,这样有两种情况:
偶数个:baccab
奇数个:bacab
因此需要考虑两种情况,找到中心,再反向遍历。
而链表中找中心的办法通常是采用快慢指针,快指针走两步,慢指针走一步。(快慢指针还可以用在寻找最小找交叉节点)
/*** Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
//需要保存三个节点,当前节点p,前一个节点pre,下一个节点q。
//尾节点wei即为下一节点为空的位置
ListNode pre=null;//初始化的前一节点为null
ListNode p=head;
ListNode wei=null;
while(p!=null){
ListNode q=p.next;//保存当前节点的下一节点
if(q==null){
wei=p;
}
p.next=pre;
pre=p;
p=q;
}
return wei;
}
public boolean isPalindrome(ListNode head) {
ListNode pfast=head;
ListNode pslow=head;
ListNode p=head;
ListNode q=head;
if(head==null||head.next==null) return true;
while(pfast.next!=null&&pfast.next.next!=null){
pfast=pfast.next.next;
pslow=pslow.next;//找中点,pslow当为偶数时为中点的靠前一个节点,为奇数是恰好为中点。
}
ListNode slow=pslow.next;//从slow的下一节点开始分两边比较。
boolean drome=true;
ListNode new_slow=reverseList(slow);
while(new_slow!=null){
if(q.val!=new_slow.val) {
drome=false;
break;
}
new_slow=new_slow.next;
q=q.next;
}
return drome;
}
}
阅读全文
0 0
- 234. Palindrome Linked List&回文链表
- 234. Palindrome Linked List 回文链表
- 234. Palindrome Linked List回文链表
- leetcode234---Palindrome Linked List(回文链表)
- Palindrome Linked List 回文链表
- Palindrome Linked List(回文链表)
- Palindrome Linked List 回文链表
- [理解leetcode解法]234. Palindrome Linked List 回文链表
- leetcode 234. Palindrome Linked List-回文链表|双指针
- Leetcode-234. Palindrome Linked List(判断链表是否回文)
- LeetCode 234. Palindrome Linked List判断链表是否回文
- LeetCode:234. Palindrome Linked List 回文链表 Java
- 234. Palindrome Linked List (回文链表判断)
- Leetcode 234. Palindrome Linked List回文链表
- leetcode 234. Palindrome Linked List 回文链表的判断
- LeetCode 234: Palindrome Linked List (回文链表)
- Palindrome Linked List 判断链表是否回文 栈实现
- Palindrome Linked List 判断一个链表是不是回文串
- CALayer
- HDU
- Scala学习(二)程序控制语句
- IT和CT融合发展为智慧城市发展提供关键技术支撑
- Eclipse的Servers视图中无法添加Tomcat6/Tomcat7
- 234. Palindrome Linked List回文链表
- Eclipse 创建第一个c++项目
- 什么是长尾关键词?
- [OpenGL] 制作一个有旋转动画的按钮
- 参数估计
- LeetCode 2.Add Two Numbers,67.Add Binary,371.Sum of Two Integers,66.Plus One
- 通过DEX(去中心化交易所)方式进行比特币以太币购买
- LeetCode394(Decode String).
- BZOJ2190: [SDOI2008]仪仗队