LeetCode | 234. 回文链表
O链接
- 这里的解法是先找到中间结点
- 然后再将中间节点后面的节点逆序一下
- 然后再从头开始和从中间开始挨个比较
- 如果中间开始的指针到走最后都相等,就返回
true
,否则返回false
代码如下:
struct ListNode* reverseList(struct ListNode* head) {struct ListNode* n1,*n2,*n3;if(head == NULL)return NULL;n1 = NULL,n2 = head;n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3)n3 = n3->next; }return n1;
}struct ListNode* middleNode(struct ListNode* head) {struct ListNode* slow = head,*fast = head;while(slow && slow->next){slow = slow->next->next;fast = fast->next;}return fast;
}bool isPalindrome(struct ListNode* head) {struct ListNode* mid = middleNode(head);struct ListNode* rhead = reverseList(mid);while(head&&rhead){if(head->val == rhead->val){head = head->next;rhead = rhead->next;}else{return false;}}return true;
}