我的大学

和我一起在LeetCode刷题吧(每天一题LeetCode)

2020-03-06  本文已影响0人  北斗星君

分类标签:链表

难易度:简单

题目描述:

编写一个函数,检查输入的链表是否是回文的。

示例 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;

}

运行结果:

运行结果 占有时间和空间
上一篇下一篇

猜你喜欢

热点阅读