leetcode刷题日记——Palindrome Linked List
来源:互联网 发布:软件详细设计方案 编辑:程序博客网 时间:2024/06/05 15:48
Given a singly linked list, determine if it is a palindrome.
Follow up:
Follow up:
Could you do it in O(n) time and O(1) space?
问题分析:题目的意思是想要判断一个链表是否为回文,即正反一样。但是题目要求不能使用额外的空间,并且时间复杂度为O(n),题目的解题的关键就在于想到把前半部分或者后半部分给颠倒一下。这里实现用的是颠倒链表的前半部分。需要注意一点的就是奇数和偶数个的链表略有不同。另外就是如果采用的颠倒前半部分,需要注意新的链表的开头部分不再是head指针了。其他都是简单的链表遍历和变更后继等简单操作。具体实现代码如下:
/** * 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) return true; int count=0,kaishi=0,jiesu=0; ListNode *p=head,*q=NULL,*m=NULL,*n=NULL,*temp=NULL; while(p){ p=p->next; count++; } if(count==1) return true; if(count%2==0){ kaishi=(count/2); } else{ kaishi=(count/2)+1; } p=head; while(kaishi){ p=p->next; kaishi--; } q=p; p=head; jiesu=count/2; while(jiesu){ p=p->next; jiesu--; } n=p; p=head; jiesu=count/2; while(jiesu){ m=p->next; p->next=n; n=p; p=m; jiesu--; } while(q){ if(n->val!=q->val) return false; n=n->next; q=q->next; } return true; }};
0 0
- leetcode刷题日记——Palindrome Linked List
- leetcode刷题日记——Remove Linked List Elements
- leetcode刷题日记——Linked List Cycle
- leetcode刷题日记—— Linked List Cycle II
- Leetcode——234. Palindrome Linked List
- LeetCode——Palindrome Linked List
- LeetCode Palindrome Linked List
- LeetCode - Palindrome Linked List
- leetcode: Palindrome Linked List
- Leetcode: Palindrome Linked List
- leetcode:Palindrome Linked List
- [LeetCode] Palindrome Linked List
- LeetCode || Palindrome Linked List
- 【leetcode】Palindrome Linked List
- LeetCode-Palindrome Linked List
- Leetcode|Palindrome Linked List
- [leetcode] Palindrome Linked List
- [LeetCode]Palindrome Linked List
- 在CentOS 6.3 64bit上如何从源码生成rpm包?
- linux jexus 服务 设置开机启动
- 技术博客的前言
- 报错: Rendering SLS 'base:minions.install' failed: Jinja variable 'list' object has no e
- HtmlParser【ed2k】
- leetcode刷题日记——Palindrome Linked List
- Android 5.x SEAndroid内核节点的读写权限
- leetcode:203 Remove Linked List Elements-每日编程第四十题
- LaTeX软件的安装和使用
- 初涉数据库
- 软件测试依据的国家技术标准规范
- 【整理】Android对Linux内核的改动你知道多少?
- iOS 截屏系统通知
- OpenCV坐标体系的初步认识