234-e-Palindrome Linked List
来源:互联网 发布:北京乐知少儿英语地址 编辑:程序博客网 时间:2024/05/22 03:03
判断一个链表是否回文。一看到判断回文第一想到就是一头一尾双指针移动,但单链表尾巴回不来啊,于是自然想到了栈。但一时半会想不出怎么保持指针,上网搜了一下搜出了另一种解法也是用了栈,用了一个慢指针遍历一个快指针每次移动2格间接测出了链表长度,但如果加上之后的慢指针遍历判断时间度应该算O(1.5n)吧,而且空间不是O(1)。鉴于该逻辑比较好理解,我也就顺着这逻辑写了,但总觉得不是leet要求的,一定有更好的。没错,stackoverflow有更好的,总体思想跟我开始想法一样,但人歪果仁实现了,我很服。
第一种解法,AC用了12ms,用静态数组模拟栈,因为用的C不想写栈了,空间较大否则过不了会runtime error:
//bool isPalindrome(struct ListNode* head) {// bool result = true;// int n = 10240;// int stack[n];// memset(stack, 0, sizeof(int) * n);// int sp = 0;// // struct ListNode myHead = {0, head};// struct ListNode *slow = &myHead;// struct ListNode *fast = head;// // while (fast != NULL && fast->next != NULL) {// slow = slow->next;// stack[sp] = slow->val;// fast = fast->next->next;// sp++;// }// slow = slow->next; //由于做了个头结点,所以slow要恒下移一位// if (fast != NULL)// stack[sp] = slow->val; //fast不为空说明为奇数,则数据栈入数据;否则栈指针要退1指向当前有效数据// else// sp--;// while (slow != NULL) {// if (slow->val != stack[sp]) {// result = false;// break;// }// slow = slow->next;// sp--;// }// // return result;//}
下面是歪果仁的递归解法,利用了递归相当于栈的特点,而且空间为O(1),很好的解释了leet上算法和解法的有趣,用了递归稍慢,AC要16ms:
int fix_isPalindrome(struct ListNode **root, struct ListNode *head){ if(!head) return 1; else { int res=fix_isPalindrome(root,head->next); if(res==0) return 0; int r=(*root)->val==head->val; *root=(*root)->next; return r; }}bool isPalindrome(struct ListNode* head) { bool result = false; result = fix_isPalindrome(&head, head); return result;}
0 0
- 234-e-Palindrome Linked List
- LeetCode-E-Palindrome Linked List
- 234Palindrome Linked List
- Palindrome Linked List 234
- 234 Palindrome Linked List
- 234Palindrome Linked List
- 234 Palindrome Linked List
- 234 - Palindrome Linked List
- 234Palindrome Linked List
- [234]Palindrome Linked List
- [234] Palindrome Linked List
- 234-Palindrome Linked List
- Palindrome Linked List leetcode 234
- 【LeetCode】234 Palindrome Linked List
- Palindrome Linked List (leetcode 234)
- leetcode 234: Palindrome Linked List
- leetcode[234]:Palindrome Linked List
- LeetCode 234Palindrome Linked List
- win8快捷键
- android开发步步为营之67:使用android开源项目android-async-http异步下载文件
- WebService详解
- windows下安装redis
- mybatis中>=和<=的实现方式
- 234-e-Palindrome Linked List
- Spark-1.4.0集群搭建
- POJ 2559 Largest Rectangle in a Histogram(单调栈)
- NULL
- cf 215 C. Crosses yy题
- 欢迎使用CSDN-markdown编辑器
- flash被火狐浏览器屏蔽
- 7.13整天自习
- Hacking Team Flash 0Day的过程分析教程