做文献综述用什么网站,建筑职业培训中心,wordpress建手机版6,找建网站公司题目
给你一个单链表的头节点 head #xff0c;请你判断该链表是否为回文链表。如果是#xff0c;返回 true #xff1b;否则#xff0c;返回 false 。
思路
利用快慢指针找到链表中间节点#xff0c;反转后半段链表。前半段从头节点开始与后半段比较。 注意当链表节点…题目
给你一个单链表的头节点 head 请你判断该链表是否为回文链表。如果是返回 true 否则返回 false 。
思路
利用快慢指针找到链表中间节点反转后半段链表。前半段从头节点开始与后半段比较。 注意当链表节点为奇数个数时中间节点不作为后半段进行翻转可以不处理注意快慢指针的跳出时机快指针每跳一步都要判断是否到头了
代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:bool isPalindrome(ListNode* head) {if(head-nextnullptr){return true;}ListNode *firsthead,*second head,*pre;bool flag false;while(first){first first-next;if(firstnullptr){flag true;break;}firstfirst-next;second second-next;}if(flag){second second-next;}ListNode *lastnullptr,*next;while(second){next second-next;second-next last;last second;secondnext;}pre head;ListNode *revert last;while(last){if(pre-val!last-val){return false;}prepre-next;last last-next;}return true;}
};