c 语言程序回文字符,C语言:输出一串字符,判断是否是"回文"

使用单链表

#include

#include

typedef struct _TNode

{

char c;

struct _TNode *next;

}

TNode;

void push(TNode **ppStack, TNode *pNode)

{

pNode->next = *ppStack;

*ppStack = pNode;

}

TNode *pop(TNode **ppStack)

{

TNode *pRet = *ppStack;

if (pRet)

{

*ppStack = pRet->next;

}

return pRet;

}

TNode *create_node(char c)

{

TNode *pNew = (TNode *)malloc(sizeof(TNode));

pNew->c = c;

pNew->next = NULL;

return pNew;

}

bool huiwen(TNode *pList)

{

TNode *p1 = pList, *p2 = pList, *pStack = NULL, *pQueue = NULL;

for (; p2 && p2->next; p1 = p1->next, p2 = p2->next, p2 = p2->next)

{

push(&pStack, create_node(p1->c));

}

if (p2)

{

pQueue = p1->next;

}

else

{

pQueue = p1;

}

for (p1 = pStack, p2 = pQueue; p2; p1 = p1->next, p2 = p2->next)

{

if (p1->c != p2->c)

{

break;

}

}

while (pStack)

{

free(pop(&pStack));

}

if (p2)

{

return false;

}

return true;

}

int main()

{

TNode *pList = NULL, *pWork;

TNode **ppTail = &pList;

char *pcTmp;

char szBuf[256];

printf("input a string:\n");

scanf("%255s", szBuf);

for (pcTmp = szBuf; *pcTmp; pcTmp++)

{

push(ppTail, create_node(*pcTmp));

ppTail = &(*ppTail)->next;

}

printf("create a list with value:\n");

for (pWork = pList; pWork; pWork = pWork->next)

{

printf("%c", pWork->c);

}

printf("\n");

if (huiwen(pList))

{

printf("Yes, it's a huiwen string!\n");

}

else

{

printf("No, it's not a huiwen string!\n");

}

while (pList)

{

free(pop(&pList));

}

fgets(szBuf, 256, stdin);

getchar();

return 0;

}

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值