Palindrome Linked List
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
O(n) time, O(n)space solution, use a stack.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ // assume I can manipulate this linked list class Solution { public: stack<int> st; bool isPalindrome(ListNode* head) { int length = getLength(head); for(int i = 0; i < length; i++){ if(i < length / 2){ st.push(head->val); }else if(i == length / 2 && length % 2 == 1){ ; }else{ if(head->val != st.top()){ return false; }else{ st.pop(); } } head = head->next; } return true; } int getLength(ListNode * head){ int count = 0; while(head != nullptr){ count++; head = head->next; } return count; } };
O(1) space solution, reverse the linked list from middle.
Then traverse them together. Compare each node