zl程序教程

您现在的位置是:首页 >  其他

当前栏目

LeetCode-234. 回文链表【链表,双指针】

LeetCode链表 指针 回文 234
2023-09-14 09:01:27 时间

题目描述:

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
示例 1:
在这里插入图片描述

输入:head = [1,2,2,1]
输出:true

示例 2:
在这里插入图片描述

输入:head = [1,2]
输出:false

提示:

链表中节点数目在范围[1, 105] 内
0 <= Node.val <= 9
https://leetcode.cn/problems/palindrome-linked-list/description/?orderBy=most_votes

解题思路一:将值复制到数组中后用双指针法

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        vector<int> vals;
        while(head!=nullptr){
            vals.emplace_back(head->val);
            head=head->next;
        }
        for(int i=0,j=vals.size()-1;i<j;++i,--j)
            if(vals[i]!=vals[j]) return false;
        return true;
    }
};

时间复杂度:O(n)
空间复杂度:O(n)

解题思路二:0


解题思路三:0