每天一道LeetCode-----回文链表
来源:互联网 发布:怎么在知乎提问 编辑:程序博客网 时间:2024/05/22 03:57
Palindrome Linked List
原题链接这里写链接内容
意思是判断链表是不是回文的
回文数都一样,左边和右边相等,重点是要找到中心位置,链表的中心位置比较不容易找,这里主要记录一种方法。
中心位置肯定就是总数除以2,那么只需要两个指针从头开始,一个步长为1,一个步长为2,最后步长为1的指针指向的就是链表中心
ListNode *find_center(ListNode* head){ ListNode* walker = head; ListNode* runner = head; while(runner->next && runner->next->next) { walker = walker->next; runner = runner->next->next; } return walker;}
找到的walker就是链表的中心,比如说
链表为1 -> 2 -> 3 -> 4walker指向2链表为1 -> 2 -> 3walker指向2
既然找到中心,只需要将右边的链表逆序,然后比较即可,代码比较容易,但是坑比较多
/** * 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) return true; ListNode *walker = head; ListNode *runner = head; while(runner->next && runner->next->next) { walker = walker->next; runner = runner->next->next; } walker->next = reverse_list(walker->next); walker = walker->next; runner = head; while(walker) { if(walker->val != runner->val) return false; walker = walker->next; runner = runner->next; } return true; }private: ListNode* reverse_list(ListNode* head) { ListNode* cur_node = head; ListNode* last_node = NULL; while(cur_node) { ListNode* next_node = cur_node->next; cur_node->next = last_node; last_node = cur_node; cur_node = next_node; } return last_node; }};
划重点
有道题是判断一个链表是否有环,也可以使用walker和runner的方法判断,等遇见了再说把,大致思路如下
ListNode *walker = head;ListNode *runner = head;while(runner->next && runner->next->next){ walker = walker->next runner = runner->next->next; if(walker == runner) return true;}return false;
阅读全文
0 0
- 每天一道LeetCode-----回文链表
- 每天一道LeetCode-----逆序链表
- 每天一道LeetCode-----最长回文子串/序列,从头开始的最长回文子串长度
- 每天一道LeetCode-----字符串乘法
- 每天一道LeetCode-----括号匹配
- 每天一道LeetCode-----数独盘求解
- 每天一道LeetCode-----生命游戏
- 每天一道LeetCode-----删除链表倒数第n个节点
- 每天一道LeetCode-----合并两个/多个有序链表为一个新链表
- 每天一道LeetCode-----链表排序,要求复杂度在O(nlogn)
- 每天一道LeetCode-----移除有序链表中的重复节点
- 每天一道leetcode题目_(1)
- 【每天一道leetcode】1:N-Queens
- 每天一道LeetCode-----重新实现next_permutation
- 每天一道LeetCode-----n皇后问题
- 每天一道LeetCode-----化简路径
- 每天一道算法题(16)——翻转链表
- 每天一道算法题——链表反转
- nginx日志格式
- 文本处理相关资料整理
- 从生活看AOP
- 【Python-3.5】绘制世界人口地图
- UVa 401 Palindromes
- 每天一道LeetCode-----回文链表
- 171019—循环语句实际操作
- 百度云搜索引擎网站
- 【安全牛学习笔记】python装饰器
- 树状数组学习笔记
- 循环队列的双循环链表结构
- 大数【加减乘除】算法
- 2017-10-19 远光软件Java开发面试+达达京东到家笔试总结
- 每天一个linux命令(12):more命令