给定一个链表,判断该链表是否为回文结构。回文是指该字符串正序逆序完全一致。如当输入链表 {1,2,3,2,1} 时,断定是回文结构,输出True。
代码实现
C语言代码:
bool isPail(struct ListNode* head ) { // write code here if(head == NULL || head->next == NULL) return true; //第一步:定义快慢指针,并将其指向头结点 struct ListNode *slow, *fast; slow = head; fast = head; //第二步:快指针每次走两步,慢指针走一步 while (fast != NULL && fast->next != NULL) { fast = fast->next->next; slow = slow->next; } //第三步:快指针指向慢指针后继结点,慢指针断链 fast = slow->next; slow->next = NULL; struct ListNode *p; p = NULL; //第四步:反转后半部分的链表 while (fast != NULL) { p = fast->next; fast->next = slow; slow = fast; fast = p; } //第五步:将快指针指向原始链表头部,将快慢指针结点的值进行对比 fast = head; while (fast != NULL && slow != NULL) { if(fast->val != slow->val) return false; fast = fast->next; slow = slow->next; } return true; }
图解代码
第一步:定义快慢指针,并将其指向头结点
第二步:快指针每次走两步,慢指针走一步
第三步:快指针指向慢指针后继结点,慢指针断链
第四步:反转后半部分的链表
第五步:将快指针指向原始链表头部,将快慢指针结点的值进行对比
分享、在看与点赞
只要你点,我们就是胖友
原文标题:数据结构:判断链表回文结构
文章出处:【微信公众号:嵌入式攻城狮】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !