给定一个单链表,判断该链表是否为回文序列。要求时间复杂度为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; }
面试中常见链表问题13:回文链表
最新推荐文章于 2022-11-03 17:58:08 发布