本文主要是介绍经典链表题-链表回文结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C++和数据结构怀有无限热忱的探索者。🙌
🌸🌸🌸这里是我分享C/C++编程、数据结构应用的乐园✨
🎈🎈🎈期待与你一同在编程的海洋中遨游,探索未知的技术奥秘💞
📝专栏指路:
📘【C++】专栏:深入解析C++的奥秘,分享编程技巧与实践。
📘【数据结构】专栏:探索数据结构的魅力,助你提升编程能力。
链表的回文结构
温馨小提示:点击即可做题
题目:
画图分析:
题目思路分析:
1.先找出中间节点
链表的中间节点(点击即可做题)找中间节点力扣上直接有这个题目,我们以此来分析思路
解决思路:快慢指针
快指针走两步,慢指针走一步
奇数个节点快指针的next指针为空时,慢指针刚好走到链表的中间节点
偶数个节点快指针为空时,慢指针刚好走到链表的中间节点
代码实现
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {//创建快慢指针,快指针走两步,慢指针走一步ListNode*fast,*slow;fast=head;slow=head;while(fast&&fast->next)//不可以换位置,在链表节点偶数个结束循环是fast==NULL,//交换位置会对空指针解引用{slow=slow->next;fast=fast->next->next;}return slow;
}
2.反转链表
反转链表(点击即可做题)找中间节点力扣上直接有这个题目,我们以此来分析思路
解决思路:迭代
假设链表为 1→2→3→∅我们想要把它改成 ∅←1←2←3
我们需要定义三个指针
一个指针初始化为空
一个指针指向原链表的头结点
一个指针指向原链表头结点的next指针指向的节点
代码实现
struct ListNode*reverse(struct ListNode*head)
{if(head==nullptr||head->next==nullptr)//只有一个节点或链表为空{return head;}struct ListNode*n1,*n2,*n3;n1=nullptr;n2=head;n3=n2->next;//保存当前节点的next指针while(n2){n2->next=n1;//当前节点的next指针指向前一个节点n1=n2;n2=n3;if(n3)//n3最先为空此时n2还没有为空没有出循环,不能对空指针n3解引用n3=n3->next;}return n1;
};
最后我们来实现一下
链表回文结构的代码
// typedef struct ListNode ListNode;
// struct ListNode {
// int val;
// struct ListNode* next;
// ListNode(int x) : val(x), next(NULL) {}
// };//寻找中间节点,快慢指针
struct ListNode*middleNode(struct ListNode*head)
{struct ListNode*fast,*slow;fast=head;slow=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}return slow;};
//翻转链表
struct ListNode*reverse(struct ListNode*head)
{if(head==nullptr||head->next==nullptr)//只有一个节点或链表为空{return head;}struct ListNode*n1,*n2,*n3;n1=nullptr;n2=head;n3=n2->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3)//n3最先为空此时n2还没有为空没有出循环,不能对空指针n3解引用n3=n3->next;}return n1;
};class PalindromeList {public:bool chkPalindrome(ListNode* A) {struct ListNode*mid=middleNode(A);struct ListNode*rmid=reverse(mid);while(A&&rmid){if(A->val!=rmid->val){return false;}A=A->next;rmid=rmid->next;}return true;}
};
持续更新中...
敬请期待
这篇关于经典链表题-链表回文结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!