C++之回文链表(力扣热题100)

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

思考:

该问题的关键点在于对于回文链表的理解,回文链表是一种特殊的链表,它从前往后和从后往前读都是相同的序列。换句话说,这个链表的元素顺序是对称的。我们可以根据对称这个特性,借助双指针对回文链表进行循环对比,如果两端对称相等,那么自然就是回文链表。

需要使用双指针进行循环对比,那么就需要两个对象,因此我们首先遍历循环给定的链表,使用数组存储链表中的值,然后再使用链表与数组进行对比得出结论。

 对于emplace_back以及push_back函数的区别如下,其实本文中哪个都可以

 push_back: 这个函数接受一个已经构造好的对象作为参数,并将其添加到向量的末尾。如果传入的参数是一个右值(例如一个临时对象或使用 std::move 转换的对象),那么 push_back 会使用移动构造函数来添加元素,这通常比拷贝构造更高效。如果传入的是一个左值(例如一个变量),那么它会使用拷贝构造函数来添加元素。 emplace_back: 这个函数可以接受多个参数,这些参数是新元素类型的构造函数所需要的。emplace_back 会在向量的末尾直接构造元素,而不是先构造一个临时对象然后再拷贝或移动到向量中。这意味着 emplace_back 可以避免临时对象的创建和销毁,从而提高效率,尤其是对于那些构造成本较高的对象。

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 = (int)vals.size() -1;i < j;++ i ,--j)
        {
            if(vals[i] != vals[j])
            {
                return false;
            }
        }

        return true;
    }
};

 

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值