LeetCode_链表的回文结构

✨✨所属专栏:LeetCode刷题专栏✨✨

✨✨作者主页:嶔某✨✨

题目描述:

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

就比如:1->2->3->2->1就是回文链表,1->2->3->1->2不是回文链表。

示例代码:

class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        // write code here
};

 分析:

这里我们得到解法是先找到链表的中间节点,之后将中间节点后面的节点全部逆置。之后再从mid节点和链表头节点开始遍历、判断值是否相同,以mid节点和链表头节点都不为空为循环条件。

 所以这里我们先要写出找中间节点的代码:

以前做过类似的题《快慢指针》。快指针一次走两步,慢指针一次走一步。最终慢指针会停在中间节点处。

 注意:这里while循环的条件不能把fast->next放在前面,要先判断的fast不为空,再判断fast的下一个节点是否为空。否则会导致空指针的解引用。

struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode* fast = head, *slow = head;
    while(fast && fast->next) {
        slow = slow->next;
        fast  = fast->next->next;
    }
    return slow;
}

链表逆置代码:

struct ListNode* ReverseList(struct ListNode* head ) {
    struct ListNode* pcur = head;
    struct ListNode* prev = NULL;
    while(pcur)
    {
        struct ListNode* tmp = pcur->next;
        pcur->next = prev;
        prev = pcur;
        pcur = tmp;
    }    
    return prev;
}

 主代码:

class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        // write code here
    struct ListNode* mid = middleNode(A); 
    struct ListNode* rmid = ReverseList(mid);
    while(A && rmid)
    {
        if(A->val != rmid->val)
            return false;
        A = A->next;
        rmid = rmid->next;
    }
    return true;
    }
};

本期博客到这里就结束了,如果有什么错误,欢迎指出,如果对你有帮助,请点个赞,谢谢!

相关推荐

  1. (对称)结构

    2024-04-25 13:56:03       17 阅读
  2. leetcode-

    2024-04-25 13:56:03       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 13:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 13:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 13:56:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 13:56:03       20 阅读

热门阅读

  1. Docker初探

    2024-04-25 13:56:03       9 阅读
  2. windows、Mac、IntelliJ IDEA常见的配置和使用技巧

    2024-04-25 13:56:03       15 阅读
  3. 二 SpringMVC接收数据

    2024-04-25 13:56:03       11 阅读
  4. windows平台编译OpenCV以支持CUDA

    2024-04-25 13:56:03       46 阅读
  5. 智能合约语言(eDSL)—— 测试

    2024-04-25 13:56:03       25 阅读
  6. YOLOv3的算法原理是怎么样的

    2024-04-25 13:56:03       12 阅读
  7. jadx反编译apk

    2024-04-25 13:56:03       16 阅读
  8. Git和SVN有什么区别?

    2024-04-25 13:56:03       15 阅读
  9. idea一些常用的快捷键

    2024-04-25 13:56:03       11 阅读
  10. Ribbon饥饿加载

    2024-04-25 13:56:03       16 阅读