main.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. //
  2. // Created by tangs on 2018/10/8.
  3. //
  4. #include <iostream>
  5. using namespace std;
  6. struct LNode{
  7. char ch;
  8. LNode *next;
  9. };
  10. /**
  11. * 通过传入的字符串创建字符链表
  12. * @param str 传入的字符串
  13. * @return
  14. */
  15. LNode *InitLink() {
  16. LNode *head = new LNode();
  17. head->ch = '\0';
  18. head->next = NULL;
  19. return head;
  20. }
  21. void PrintLink(LNode*L) {
  22. if (L == NULL) {
  23. return;
  24. }
  25. LNode *p = L->next;
  26. while (p != NULL) {
  27. cout << p->ch;
  28. p = p->next;
  29. }
  30. cout << endl;
  31. }
  32. bool GetValue(LNode* L, char &x) {
  33. if (L == NULL|| L->next ==NULL)
  34. return false;
  35. char temp = L->next->ch;
  36. x = temp;
  37. return true;
  38. }
  39. int DeNode(LNode* &L){
  40. if (L == NULL){
  41. return 1;
  42. }
  43. L = L->next;
  44. return 0;
  45. }
  46. bool JudgeChar(LNode* &L, char ch, int length, int number) {
  47. // 进栈
  48. if (number <= (length / 2)) {
  49. LNode *node = new LNode();
  50. node->ch = ch;
  51. node->next = NULL;
  52. LNode *p = L->next;
  53. node->next = p;
  54. L->next = node;
  55. return true;
  56. }
  57. // 判断长度是否是单数,单数的话,中间的字符默认合法。
  58. if (length % 2 != 0 && number == length / 2 + 1)
  59. return true;
  60. // 判断是否合法,然后出栈
  61. char tempCh;
  62. if (!GetValue(L, tempCh))
  63. return false;
  64. if (tempCh != ch)
  65. return false;
  66. // 出栈
  67. DeNode(L);
  68. return true;
  69. }
  70. bool JudgeStr(LNode* &L, string str){
  71. for (int i = 0;i < str.length();i ++){
  72. if (JudgeChar(L, str[i], str.length(), i+1)){
  73. continue;
  74. }
  75. return false;
  76. }
  77. return true;
  78. }
  79. /**
  80. * 设单链表的表头指针为L,节点结构由data和next两个域组成,其中data域为字符型,
  81. * 试设计算法判断该链表的全部n个字符是否中心对称。例如xyx,xyyx都是中心对称。
  82. * @return
  83. */
  84. int main() {
  85. LNode *L = InitLink();
  86. string str;
  87. // cin >> str;
  88. str = "xyx";
  89. if (JudgeStr(L, str)) {
  90. cout << "legal: " << str << endl;
  91. } else {
  92. cout << "illegal: " << str << endl;
  93. }
  94. str = "xyyx";
  95. if (JudgeStr(L, str)) {
  96. cout << "legal: " << str << endl;
  97. } else {
  98. cout << "illegal: " << str << endl;
  99. }
  100. // while (cin>>str){
  101. // if (JudgeStr(L, str)) {
  102. // cout << "legal: " << str << endl;
  103. // } else {
  104. // cout << "illegal: " << str << endl;
  105. // }
  106. // }
  107. return 0;
  108. }