代码随想录算法训练营第五天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交(同160题)、142.环形链表Ⅱ
1.代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素2.代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II3.代码随想录算法训练营第四天| 203. 移除链表元素、707.设计链表、206.反转链表
4.代码随想录算法训练营第五天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交(同160题)、142.环形链表Ⅱ
5.代码随想录算法训练营第六天| 242. 有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和6.代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之和7.代码随想录算法训练营第八天|344.反转字符串、541.反转字符串Ⅱ、54.替换数字(卡码网是真滴不好用)8.代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串中第一个匹配项的下标、459.重复的子字符串9.代码随想录算法训练营第十一天|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项10.代码随想录算法训练营第十二天|150.逆波兰表达式求值、239.滑动窗口最大值、347.前k个高频元素11.代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、515、116、117、104、11112.代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 (优先掌握递归)、111.二叉树的最小深度13.代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数1 class Solution { 2 public: 3 ListNode* swapPairs(ListNode* head) { 4 if (head == NULL || head->next == NULL) { 5 return head; 6 } 7 ListNode* h1 = head; 8 ListNode* h2 = head->next; 9 ListNode* temp = (ListNode*)malloc(sizeof(struct ListNode)); 10 ListNode* ans = temp; 11 temp->next =h1; 12 while (h1 && h2) { 13 h1->next = h2->next; 14 h2->next = h1; 15 temp->next = h2; 16 temp = h1; 17 if (h1->next && h1->next->next) { 18 h1 = h1->next; 19 h2 = h1->next; 20 } 21 else { 22 ans = ans->next; 23 return ans; 24 } 25 } 26 ans = ans->next;; 27 return ans; 28 } 29 };
19题就是一个快慢指针解决
1 class Solution { 2 public: 3 ListNode* removeNthFromEnd(ListNode* head, int n) 4 { 5 //快慢指针处理 让快指针先走 再让慢指针同步进行 6 //主要问题是可能会涉及删除第一个节点 手动添加一个头节点就很好处理了 7 ListNode* tmp = new ListNode(0); 8 tmp->next = head; 9 ListNode* h1 = head; 10 ListNode* h2 = tmp; 11 while(n--){ 12 h1 = h1->next; 13 } 14 while(h1){ 15 h1 = h1->next; 16 h2 = h2->next; 17 } 18 h2->next = h2->next->next; 19 return tmp->next; 20 } 21 };
面试题 02.07. 链表相交(同160题)主要是理清思路,如何用遍历获取二者之间的长度关系,详情见代码注释。
1 class Solution { 2 /* 3 假设相交 4 两个链表 相交后长度为len3 5 短的链表相交前长度为len2 长的链表相交前比短的长len1 6 即 短链表长度为len2+len3 长链表长度为len1+len2+len3 7 长f1 短s1 结点指针同时出发 等短链表走完 长链表f1还剩len1到null 8 长链表起点新起一个指针f2出发 等f1走完 f2刚好走了s1的距离 9 此时短新起s2指针出发 10 如果二者有交点 在到达null前 一定有f2==s2 没有就是不相交 11 */ 12 public: 13 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 14 ListNode *a = headA; 15 ListNode *b = headB; 16 ListNode* l1; 17 ListNode* l2; 18 ListNode* s2; 19 while(a && b) { 20 a=a->next; 21 b=b->next; 22 } 23 if(a == NULL){ 24 l1 = b; 25 l2 = headB; 26 s2 = headA; 27 } 28 else{ 29 l1 = a; 30 l2 = headA; 31 s2 = headB; 32 } 33 while(l1 && l2){ 34 l1=l1->next; 35 l2=l2->next; 36 } 37 while(l2 && s2){ 38 if(l2==s2){ 39 return l2; 40 } 41 l2=l2->next; 42 s2=s2->next; 43 } 44 return NULL; 45 } 46 };
142题还挺有意思的,要画图理解快慢指针追逐的过程,再用表达式算出之间的联系。
1 class Solution { 2 public: 3 ListNode* detectCycle(ListNode* head) 4 { 5 ListNode* fast = head; 6 ListNode* slow = head; 7 ListNode* ans = head; 8 if(head == NULL) 9 { 10 return NULL; 11 } 12 while (1) 13 { 14 fast = fast->next; 15 if (fast==NULL) { 16 return NULL; 17 } 18 fast = fast->next; 19 if (fast==NULL) { 20 return NULL; 21 } 22 slow = slow->next; 23 if (fast == slow) { 24 while (1) { 25 if (ans == slow) { 26 return ans; 27 } 28 else { 29 ans = ans->next; 30 if(ans == slow) 31 { 32 return ans; 33 } 34 slow = slow->next; 35 } 36 } 37 } 38 } 39 } 40 };
自在飞花轻似梦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端