给定一个链表,判断该链表是否为回文结构。回文是指该字符串正序逆序完全一致。如当输入链表 {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条评论
快来发表一下你的评论吧 !