当前位置:   article > 正文

链表的回文结构OJ

链表的回文结构OJ

链表的回文结构_牛客题霸_牛客网对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId=49&&tqId=29370&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking

题目

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

测试样例:
1->2->2->1
返回:true

 本题用到了链表的逆转和链表的中间节点的应用

首先说一下链表的中间节点的查找

  1. struct ListNode* midfind(struct ListNode* head)
  2. {
  3. struct ListNode*fast,*slow=head;
  4. while(fast&&fast->next)
  5. {
  6. fast=fast->next->next;
  7. slow=slow->next;
  8. }
  9. return slow;
  10. }

 中间结点的查找主要运用到了快慢指针的遍历。快指针比慢指针多走一步,最后快指针走到NULL,或者快指针的next为NULL停止。

再来说一下链表的逆转

  1. struct ListNode* reverselist(struct ListNode*head)
  2. {
  3. struct ListNode*prve= NULL;
  4. struct ListNode*cur=head;
  5. while(cur)
  6. {
  7. struct ListNode*next=cur->next;
  8. cur->next=prve;
  9. prve=cur;
  10. cur=next;
  11. }
  12. return prve;
  13. }

逆转的本质是要先定义一个空指针,如上代码的*prve,然后下一步就开始保存cur的下一个指针,防止cur被覆盖,导致下一个节点丢失。最后返回prve即可。原因是这是的cur已经指向NULL,所以无意义

最后是实现链表回文(注意:C++兼容C语言)

  1. #include <algorithm>
  2. class PalindromeList {
  3. public:
  4. struct ListNode* midfind(struct ListNode* head)
  5. {
  6. struct ListNode*fast,*slow=head;
  7. while(fast&&fast->next)
  8. {
  9. fast=fast->next->next;
  10. slow=slow->next;
  11. }
  12. return slow;
  13. }
  14. struct ListNode* reverselist(struct ListNode*head)
  15. {
  16. struct ListNode*prve= NULL;
  17. struct ListNode*cur=head;
  18. while(cur)
  19. {
  20. struct ListNode*next=cur->next;
  21. cur->next=prve;
  22. prve=cur;
  23. cur=next;
  24. }
  25. return prve;
  26. }
  27. bool chkPalindrome(ListNode* A) {
  28. struct ListNode* mid=midfind(A);
  29. struct ListNode* revermid=reverselist(mid);
  30. while(revermid&&A)
  31. {
  32. if(revermid->val!=A->val)
  33. {
  34. return false;
  35. }
  36. revermid=revermid->next;
  37. A=A->next;
  38. }
  39. return true;
  40. }
  41. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/724613
推荐阅读
相关标签
  

闽ICP备14008679号