[leetcode] 234.
2015-08-29 00:59
246 查看
题目:
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
题意:
给定一个单链表,确定它是否是回文的,即元素收尾对应相等。
思路:
因为需要O(1)的空间复杂度,O(n)的时间复杂度,我们采用快慢两个指针,取得链表的后半部分,将后半部分反转,然后将前后两个部分的元素一一对比。
代码如下:
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
题意:
给定一个单链表,确定它是否是回文的,即元素收尾对应相等。
思路:
因为需要O(1)的空间复杂度,O(n)的时间复杂度,我们采用快慢两个指针,取得链表的后半部分,将后半部分反转,然后将前后两个部分的元素一一对比。
代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool isPalindrome(ListNode* head) { if (head == NULL || head->next == NULL)return true; ListNode* first = head, *second = head; while (second != NULL && second->next != NULL && second->next->next!= NULL) { first = first->next; second = second->next->next; } second = reverse(first->next);//reverse the second part first->next = NULL; while (head != NULL && second != NULL) { if (head->val != second->val)return false; head = head->next; second = second->next; } return true; } ListNode* reverse(ListNode* head) { if (head == NULL || head->next == NULL)return head; ListNode* h = head, *next; head = head->next; h->next = NULL; while (head != NULL) { next = head->next; head->next = h; h = head; head = next; } return h; } };
相关文章推荐
- Java IO编程 学习笔记 (其二:简易记事本)
- 初学java,写的购物平台控制台小程序。ps:只要努力就会有收获。
- 【读书笔记】iOS-Xcode知识-多线程
- 【读书笔记】iOS-Xcode知识-多线程
- hdu5384 Danganronpa(AC自动机)
- Java反射机制调用私有方法
- Introduction to Java Programming编程题9.32<检测ISBN>
- hdu1757 A Simple Math Problem(矩阵快速幂)
- 面试题:Two Sum
- Introduction to Java Programming编程题9.31<刽子手游戏>
- 技术真的能改变世界嘛?
- 删除HTML里的a href标签
- c# winform 火狐浏览器 查看cookie
- Swift入门(十一)——类型转换与is、as操作
- HTTP Keep-Alive
- Citrix 存储虚拟化产品Melio
- 题目:二叉树的序列化和反序列化
- hiho一下第六十周
- 递归算法(二)——前缀转后缀
- 题目:二叉树的层次遍历 II