码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 234. 回文链表

时间:2018-08-12 12:05:00      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:node   div   als   flag   break   span   比较   amp   slow   

bool isPalindrome(ListNode* head) {
         ListNode* fast = head;
         ListNode* slow = head;
         //如果没有元素
         if(head==NULL)
            return true; 
         
         //如果就一个元素
         if(fast->next==NULL)
             return true;
         
         //如果就两个元素
         if(fast->next->next==NULL)
             return fast->val == fast->next->val;
         
         //上面已经进行了边界条件的判断,下面保证至少有3个元素以上
         //如果超过了两个元素
         while(fast->next!=NULL && fast->next->next!=NULL)
         {
             slow = slow->next;
             fast = fast->next->next;
         }
         //如果是奇数,slow指向中间的值,如果是偶数,slow指向中间的前一个数
         fast = slow->next;
         slow->next = NULL;
         
         ListNode *tmp = NULL;
         while(fast!=NULL)
         {
             tmp = fast->next;
             fast->next = slow;
             slow = fast;
             fast = tmp;
         }
         //开始进行比较
         fast = slow;
         tmp = head;
         bool flag = true;
         //这个条件判断很重要
         while(fast!=NULL && tmp!=NULL)
         {
             if(fast->val != tmp->val)
             {
                 flag = false;
                 break;
             }
             fast = fast->next;
             tmp = tmp->next;
         }
         
         //对链表再次进行翻转
         fast = slow->next;
         slow->next = NULL;
         tmp = NULL;
         while(fast!=NULL)
         {
             tmp = fast->next;
             fast->next=slow;
             slow = fast;
             fast = tmp;
         }
         return flag;   
    }

 

Leetcode 234. 回文链表

标签:node   div   als   flag   break   span   比较   amp   slow   

原文地址:https://www.cnblogs.com/randyniu/p/9462133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!