目录
1.题目
2.自解
代码
提交结果
1.题目
给你一个单链表的头节点
head
,请你判断该链表是否为回文链表
。如果是,返回
true
;否则,返回false
。示例 1:
输入:head = [1,2,2,1] 输出:true示例 2:
输入:head = [1,2] 输出:false提示:
- 链表中节点数目在范围
[1, 105]
内0 <= Node.val <= 9
进阶:你能否用
O(n)
时间复杂度和O(1)
空间复杂度解决此题?代码模板
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool isPalindrome(struct ListNode* head) { }
2.自解
一个容易想到的方法:将链表的每个节点的val存入一个数组中,最后用双指针访问
有关双指针判断回文链表的思想参见L8.【LeetCode笔记】回文数
代码
bool isPalindrome(struct ListNode* head)
{int arr[100000]={0};int i=0; struct ListNode* cur=head; while (cur){arr[i]=cur->val;i++;cur=cur->next;}int* left=&arr[0];int* right=&arr[i-1];while (left<right){if (*left==*right){left++;right--;}elsereturn false;}return true;
}
提交结果
时间复杂度和空间复杂度均为