面试中常见链表问题13:回文链表

来源:互联网 发布:linux内核经典书籍 编辑:程序博客网 时间:2024/06/14 02:43
    给定一个单链表,判断该链表是否为回文序列。要求时间复杂度为o(n),空间复杂度为o(1)。    解析:(1)把链表分割成前后两部分。(2)反转前半部分链表。(3)判断前后两部分链表是否相等。
bool isPalindrome(ListNode* head) {if (head == NULL || head->next == NULL)return true;ListNode *pNewHead = new ListNode(INT_MAX);//pNewHead->next = head;ListNode *slow = head;ListNode *fast = head;while (fast != NULL && fast->next != NULL){ListNode *tmp = slow;slow = slow->next;fast = fast->next->next;tmp->next = pNewHead->next;pNewHead->next = tmp;}ListNode *p1 = slow->next;if (fast == NULL)p1 = slow;ListNode *p2 = pNewHead->next;while (p1 != NULL && p2 != NULL){if (p1->val != p2->val)return false;p1 = p1->next;p2 = p2->next;}return true;}
0 0
原创粉丝点击