力扣HOT 100-相交链表
2026/9/5 1:25:13 网站建设 项目流程

题目链接:160. 相交链表 - 力扣(LeetCode)

题目截图:

我的题解:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ // 长度差对齐法 // 1. 分别遍历两个链表,求出链表 A、链表 B 的长度; // 2. 让长链表的指针先走「两链表长度差」步; // 3. 之后两个指针同步一步一步往后移动; // 4. 当两个指针**内存地址相等**,就是相交起始节点;遍历完都不等,返回 NULL。 class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { // p1遍历链表A,p2遍历链表B ListNode *p1=headA,*p2=headB; // len1保存链表A长度,len2保存链表B长度 int len1=0,len2=0; // 统计两个链表的节点个数 while(p1!=NULL){ len1++; p1=p1->next; } while(p2!=NULL){ len2++; p2=p2->next; } // 指针重置回各自链表头结点,准备对齐起点!!!!!!(我一开始忘了) p1=headA,p2=headB; // 保证p1永远指向更长的那条链表,len1是长链表长度,len2短链表长度 if(len2>len1){ // 函数std :: swap()是C ++标准模板库(STL)中的内置函数 // 不返回任何内容,它交换两个变量的值。 // 参数可以是任何数据类型,swap(a,b) swap(p1,p2); swap(len1,len2); } // 计算两条链表的长度差 int cha=len1-len2; // 长链表指针p1先走【长度差】步,使得剩余未遍历的链表长度相等 while(cha--){ p1=p1->next; len1--; } // 此时p1、p2后面剩余节点数相同,同步向后走,找第一个相同地址的节点 // 相交链表判断的是节点地址相等,不是val值相等 while(len1--){ // 如果指针指向同一个节点,找到相交起点,直接返回 if(p1==p2){ return p1; } len2--; p1=p1->next; p2=p2->next; } // 循环结束没有找到相同节点,说明链表不相交,返回NULL return NULL; } };

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询