zoukankan      html  css  js  c++  java
  • 234. Palindrome Linked List

    question:

    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?

    answer:

    思路:把前半部分的链表翻转,再分别用两个指针从中间往两边遍历比较。

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     bool isPalindrome(ListNode* head) {
    12         ListNode *p,*q,*r;
    13         int i, l=0;
    14         p=q=head;
    15         r=NULL;
    16         if(head==NULL||head->next==NULL){
    17           return true;
    18         }
    19         while(p!=NULL){
    20             l++;
    21             p=p->next;
    22         }
    23         for(i=0;i<l/2;i++){
    24             p=q->next;
    25             q->next=r;
    26             r=q;
    27             q=p;
    28         }
    29         if(l%2==1){
    30             p=p->next;
    31         }
    32         while(p!=NULL&&r!=NULL){
    33             if(r->val!=p->val)
    34             return false;
    35             p=p->next;
    36             r=r->next;
    37         }
    38         return true;
    39     }
    40 };
  • 相关阅读:
    C语言扩展题
    C语言第五题
    C语言第四题
    C语言第三题
    c语言第二题
    11
    游戏开发的一些想法
    openxml的视频教程
    JavaScript调试之console.log
    IPPatternConverter
  • 原文地址:https://www.cnblogs.com/Reindeer/p/5626477.html
Copyright © 2011-2022 走看看