判断一个链表是否为回文链表,说出你的思路并手写代码

发布于 2020-01-30 17:34:08
关注者
0
被浏览
440
1 个回答
  • 面试哥
    面试哥 2020-01-30
    为面试而生,有面试问题,就找面试哥。

    参考回答:

    思路:使用栈存储链表前半部分,然后一个个出栈,与后半部分元素比较,如果链表长度未知,可以使用快慢指针的方法,将慢指针指向的元素入栈,然后如果快指针指向了链表尾部,此时慢指针指向了链表中间

    bool is_palindromic_list2(mylist *a_list)
    {
    if(a_list == nullptr)
    {
    return false;
    }
    stack<int>list_value;
    mylist * fast =a_list;
    mylist *slow =a_list;
    while(fast->next!=nullptr && fast->next->next!=nullptr)
    {
    list_value.push(slow->next->value);
    slow = slow->next;
    fast = fast->next->next;
    }
    cout<<"middle elem value is "<<slow->next->value<<endl;
    if(fast->next != nullptr)
    {
    cout<<"the list has odd num of node"<<endl;
    slow =slow->next;
    }
    int cur_value;
    while(!list_value.empty())
    {
    cur_value = list_value.top();
    cout<<"stack top value is"<<cur_value<<endl;
    cout<<"list value is "<<slow->next->value<<endl;
    if(cur_value != slow->next->value)
    {
    return false;
    }
    list_value.pop();
    slow = slow->next;
    }
    return true;
    }
    
    

     

面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看