leetcode(链表篇)
每天写一道leetcode题目让我感觉每天都在提升一点点的踏实感也算是一种自我安慰。目前思路一个难得leetcode这样的题目一般会有几个知识点构成一个题目用的到很多知识点分为三天第一天直接理解框架对着敲代码第二天自己敲不会看代码是哪里不会去理解第三天直接自己盲敲代码-------------------2026-04.21 已经是第三天的阶段了体积题解首先快慢指针寻找链表中点 吗慢指针走一步 快指针走两步while 终止条件fastfast-next然后 翻转后半段链表-》翻转链表知识点-》后半段的起点是slow指针不能搞错最后前后两段链表进行比较 此时后半段 的头结点是pre前半段的头结点是head注意要理解 快慢指针 奇数 偶数个数slow分别指向哪里以及翻转链表后的头结点是哪一个比较前后链表 值得时候要注意 前后头结点都是那个代码(c语言)bool isPalindrome(struct ListNode* head) { //快慢指针 找到链表中点 struct ListNode * fast head; struct ListNode *slow head; while(fast fast-next){ slow slow-next; fast fast-next-next; } struct ListNode *pre NULL; struct ListNode *cur slow;//此时无论个数是奇数 slow指向中点偶数指向后半段的起点 //翻转后半段的链表 while(cur){ struct ListNode *next cur-next; cur-next pre; pre cur; cur next; }//此时pre是头结点 //两个链表进行对比 fast head;//pre此时最后指向NULL while(pre !NULL){ if(fast-val !pre-val)return false; fast fast-next; pre pre-next; } return true; }----2026.04.22 相交链表-----------------解法用到了数学思维的 交换路径 ABBA /( AC)B (BC)A和双指针的路径交换思想难点在于理解 数学思维的交换路径以及要知道 比较的是内存地址不是值struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { if(headA NULL ||headB NULL){ return NULL; } struct ListNode *pAheadA; struct ListNode *pBheadB; //终止条件 pAPB找到了相交的点或者同时跑完了终点 while(pA!pB){ pA (pA NULL)?headB:pA-next; pB (pB NULL)?headA:pB-next; } return pB; }--------------------------------2026.06.09更新一直在刷题之前是单纯的对比着敲代码现在可以理解思路后自己慢慢敲了没有精力去一直更新了