分类标签:链表
难易度:简单
题目描述:
编写一个函数,检查输入的链表是否是回文的。
示例 1:输入: 1->2 输出:false
示例 2:输入: 1->2->2->1 输出:true
思路:链表转换成数组
在链表问题处理过程中,很多时候对链表的指针处理是十分头疼的,对于这个问题我们可以采用将链表转换成数组,再通过对数组的下标进行处理,从而使得问题迎刃而解
代码:
bool isPalindrome(struct ListNode* head){
if(head==NULL)
return true;
struct ListNode * newHead=head;
int count=0;
while(newHead!=NULL)
{
count++;
newHead=newHead->next;
}
int * nums=(int *)calloc(sizeof(int),count);
int k=0;
newHead=head;
while(newHead!=NULL)
{
nums[k++]=newHead->val;
newHead=newHead->next;
}
for(int i=0;i<count/2;i++)
{
if(nums[i]!=nums[count-1-i])
return false;
}
return true;
}
网友评论