标签:htm 方法 isp return leetcode pre www. script int
请检查一个链表是否为回文链表。
进阶:
你能在 O(n) 的时间和 O(1) 的额外空间中做到吗?
详见:https://leetcode.com/problems/palindrome-linked-list/description/
方法一:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool isPalindrome(ListNode* head) { if(head==nullptr||head->next==nullptr) { return true; } ListNode *slow=head; ListNode *fast=head; stack<int> stk; stk.push(head->val); while(fast->next&&fast->next->next) { slow=slow->next; fast=fast->next->next; stk.push(slow->val); } if(!fast->next) { stk.pop(); } while(slow->next) { slow=slow->next; int tmp=stk.top(); if(slow->val!=tmp) { return false; } stk.pop(); } return true; } };
方法二:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool isPalindrome(ListNode* head) { if(!head||!head->next) { return true; } ListNode *slow=head; ListNode *fast=head; ListNode *first=nullptr; while(fast&&fast->next) { first=slow; slow=slow->next; fast=fast->next->next; } fast=first->next; first->next=nullptr; ListNode *pre=nullptr; ListNode *next=nullptr; while(fast) { next=fast->next; fast->next=pre; pre=fast; fast=next; } first=head,fast=pre; while(first&&fast) { if(first->val!=fast->val) { return false; } first=first->next; fast=fast->next; } return true; } };
参考:https://www.cnblogs.com/grandyang/p/4635425.html
234 Palindrome Linked List 回文链表
标签:htm 方法 isp return leetcode pre www. script int
原文地址:https://www.cnblogs.com/xidian2014/p/8759212.html