什麼是迴文?舉兩個栗子spa
上海自來水來自海上code
黃山落葉松葉落山黃blog
如何判斷鏈表是否是迴文呢?get
struct ListNode { char value; ListNode *next; }; ListNode* getMiddleNode(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *fast = head; ListNode *slow = head; while (fast->next != NULL) { fast = fast->next; slow = slow->next; if(fast->next != NULL) fast = fast->next; } return slow; } ListNode* reverseListRecursive(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *newHead = reverseListRecursive(head->next); head->next->next = head; head->next = NULL; return newHead; } bool isPalindrome(ListNode *head) { if (head == NULL || head->next == NULL) return true; ListNode *middleNode = getMiddleNode(head); ListNode *rbegin = reverseListRecursive(middleNode); ListNode *lbegin = head; while (rbegin != NULL) { if (lbegin->value != rbegin->value) { return false; } lbegin = lbegin->next; rbegin = rbegin->next; } return true; }
完美。ast