Leetcode 234. Palindrome Linked List

来源:互联网 发布:plc编程标准 编辑:程序博客网 时间:2024/06/05 22:49

题目链接:https://leetcode.com/problems/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?

Subscribe to see which companies asked this question

思路:根据题目要求,时间复杂度O(n),空间复杂度O(1),采用反转链表的方法,将前半部分反转,然后挨个比较。

代码:

/** * 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) {bool re = 1;if (head == NULL || head->next == NULL)re = 1;else{ListNode* p1 = head;//慢指针ListNode* p2 = head->next;ListNode* p3 = head->next;//p3是快指针,移动速度是p1的两倍p1->next = NULL;//反转前半部分链表while (p3!= NULL&&p3->next != NULL){p3 = p3->next->next;ListNode* tmp = p2->next;p2->next = p1;p1 = p2;p2 = tmp;}if (p3 == NULL)//链表长度是奇数,p1指向了中间结点,让p1指向它的前一个结点p1 = p1->next;//开始比较while (p2!= NULL){if (p1->val != p2->val){re = 0;break;}p1 = p1->next;p2 = p2->next;}}return re;}};


0 0