leetcode:Palindrome Linked List
2015-07-23 19:27
519 查看
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?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
判断一个存在数组里的串是不是回文只要定义两个指针就可以了,一个指向头,一个指向尾,遍历向中间逼近,只要遇到不相等就返回假,当尾指针小于等于头指针就结束。但是在单向链表里面却不能这样,因为指针的方向只有一个,所以,合适的方法是找到中点,把中点后面的部分链表反转,这样,一个指向头,一个指向中点的指针进行向下遍历比较就可以了。
在这里就用到链表中点的查找,还有链表的反转。代码如下:
Follow up:
Could you do it in O(n) time and O(1) space?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
判断一个存在数组里的串是不是回文只要定义两个指针就可以了,一个指向头,一个指向尾,遍历向中间逼近,只要遇到不相等就返回假,当尾指针小于等于头指针就结束。但是在单向链表里面却不能这样,因为指针的方向只有一个,所以,合适的方法是找到中点,把中点后面的部分链表反转,这样,一个指向头,一个指向中点的指针进行向下遍历比较就可以了。
在这里就用到链表中点的查找,还有链表的反转。代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ ListNode* reverseList(ListNode* head)//反转链表 { ListNode* next = head->next; head->next = NULL; while (next) { ListNode* tmp = next->next; next->next = head; head = next; next = tmp; } return head; } bool isPalindrome(ListNode* head) { ListNode *slow, *fast; slow = head; fast = head; while (fast && fast->next) { slow = slow->next; fast = fast->next; } //slow就是反转的位置,因为当节点数是奇数时,我们并不用比较中间那个节点 if (fast)//奇数个节点 slow = reverseList(slow->next); else slow = reverseList(slow); //开始比较 fast = head; while (slow) { if (fast->val != slow->val) return false; slow = slow->next; fast = fast->next; } return true; }
相关文章推荐
- 那些年,我们读过的python!
- HDU 4745——Two Rabbits
- NGUI3.9.0 Scroll View
- Android开源计划-一周开发app
- hdu 1087 Super Jumping! Jumping! Jumping!(最长上升子序列&dp)
- C++中的关键字explict
- 快速排序优化通过中位数优化
- 【java】利用set集合特性去重
- bzoj-4003 城池攻占
- BZOJ 2588 Count on a tree (COT) 是持久的段树
- 社会保障系列1《介绍》
- Linux远程登录Windows桌面
- 少年 DXH
- hdu2795Billboard 线段树
- Android 中的数据操作方式:文件操作/SharedPreferences /SQLite
- LeetCode#70 Climbing Stairs
- 单选按钮和复选框
- lib和dll的区别
- 【机房收费系统】MSHflexgrid的用法
- Windows上模拟Linux环境