思路
再数组栈的基础上,结合数组的正向遍历
将链表的头结点不断向后遍历,读取值赋给数组栈,直接抛弃掉链表,直接正向和反向遍历数组。
优点:代码简练,不用定义多余的指针,直接利用头结点
缺点:没释放内存
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool isPalindrome(struct ListNode* head)
{
int stack[100001];
int p = -1;
while(head != NULL)
{
stack[++p] = head->val;
head = head->next;
}
for(int i =0 ;i<p ; i++)
{
if(stack[i]!= stack[p])
{
return false;
}
else
{
p--;
}
}
return true;
}
作者:卡冈图雅
链接:https://leetcode.cn/problems/palindrome-linked-list/solutions/2735915/hui-wen-lian-biao-cyu-yan-by-qia-gang-tu-q1w9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第二种方法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool isPalindrome(struct ListNode* head)
{
//定义一个整数
long long num = 0;
// 第1次遍历拼成整数
struct ListNode *current = head;
while (current != NULL)
{
num = num * 10 + current->val;
current = current->next;
}
bool result = true;
current = head;
while (current != NULL)
{
if (current->val != (num % 10))
{
result = false;
break;
}
else
{
num /= 10;
}
current = current->next;
}
return result;
}