1. 程式人生 > 其它 >LeetCode234:迴文連結串列

LeetCode234:迴文連結串列

技術標籤:我的leetcode刷題連結串列leetcode演算法資料結構c++

一、題目描述

    請判斷一個連結串列是否為迴文連結串列。
示例 1:

輸入: 1->2
輸出: false

示例 2:

輸入: 1->2->2->1
輸出: true

進階:
    你能否用 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) { } };

二、解題思路

    先判斷連結串列長度

	int length=0;
    ListNode* p=head;
     while(p!=nullptr){
         length++;
         p=p->next;
     }

    建立一個與連結串列等長的陣列,再把每個節點對應的值放入陣列中

	int a[length];
    for(int i=0;i<length;i++){
        a[
i]=p->val; p=p->next; }

    比較陣列中對應的值

	for(int i=0;i<length/2;i++){
         if(a[i]!=a[length-i-1])
              return false;
        }

三、我的程式碼

    直接在力扣上寫的。

/**
 * 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) { int length=0; ListNode* p=head; while(p!=nullptr){ length++; p=p->next; } if(length==0||length==1) return true; p=head; int a[length]; for(int i=0;i<length;i++){ a[i]=p->val; p=p->next; } for(int i=0;i<length/2;i++){ if(a[i]!=a[length-i-1]) return false; } return true; } };

四、測試結果

在這裡插入圖片描述