LeetCode234:迴文連結串列
阿新 • • 發佈:2020-12-19
技術標籤:我的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;
}
};