题目描述
写一个算法,判断链表是否是回文串。
输入样例1
[1, 2, 3, 3, 1]
输出样例1
不是回文串
输入样例2
[1, 2, 3, 3, 2, 1]
输出样例2
是回文串
算法
找到链表中前后对应的字符,如果不相等,就不是回文串,将标记位置为1,直接退出循环。
最终标记位f为0,说明是回文串。
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
auto dummy=head;
int n=4,f=0;
while(n>=1)
{
int times=n; //为对应节点之间的距离
ListNode *t=(ListNode*)malloc(sizeof(ListNode)); //t最初指向当前节点,不断向后走,找到对应的对称节点
t=head;
while(times)
{
t=t->next;
times--;
}
if(t->val!=head->val){ //比对对应节点的值是否相同
f=1;
break;
}
head=head->next;
n-=2;
}
if(f) cout<<"不是回文串"<<endl;
else cout<<"是回文串"<<endl;
return dummy;
}
};