当前位置:   article > 正文

链表回文结构_题目描述 给定一个链表的头指针a,请返回一个bool值,代表其是否为回文结构。保证链

题目描述 给定一个链表的头指针a,请返回一个bool值,代表其是否为回文结构。保证链

题目描述:

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

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

测试样例:

1->2->2->1
返回:true

思路图:

代码实现:

 

  1. /*
  2. struct ListNode {
  3. int val;
  4. struct ListNode *next;
  5. ListNode(int x) : val(x), next(NULL) {}
  6. };*/
  7. class PalindromeList {
  8. public:
  9. struct ListNode *MiddeNode(struct ListNode *head) //创建一个函数 找中间节点
  10. {
  11. struct ListNode *fast,*slow;
  12. fast=slow=head;
  13. while(fast&&fast->next) //定义快慢指针 找中间节点
  14. {
  15. fast=fast->next->next;
  16. slow=slow->next;
  17. }
  18. return slow;
  19. }
  20. //逆置函数
  21. struct ListNode *reverseList(struct ListNode *head)
  22. {
  23. struct ListNode *newhead=NULL;
  24. struct ListNode *cur=head;
  25. while(cur)
  26. {
  27. struct ListNode *next=cur->next;
  28. cur->next=newhead;
  29. newhead=cur;
  30. cur=next;
  31. }
  32. return newhead;
  33. }
  34. bool chkPalindrome(ListNode* A)
  35. {
  36. // write code here
  37. struct ListNode *Mid= MiddeNode(A);
  38. struct ListNode *Mhead=reverseList(Mid);
  39. while(A&&Mhead)
  40. {
  41. if(A->val==Mhead->val)//遍历链表 看看元素是否相等
  42. {
  43. A=A->next;
  44. Mhead=Mhead->next;
  45. }
  46. else
  47. {
  48. return false;
  49. }
  50. }
  51. return true;
  52. }
  53. };

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号