本文主要是介绍从零开始的LeetCode刷题日记:面试题 02.07. 链表相交,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.相关链接
题目链接:面试题 02.07. 链表相交(同160.链表相交)
二.心得体会
这道题是一道链表题,不涉及对结点进行操作所以不用虚拟头结点。这道题的思想是从后往前进行对齐,因此我们需要先求出两条链表的长度,然后让长的那条链表与短的进行对齐,然后统一往后一个个节点比对,从而找到相交节点。
三.代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* curA = headA;ListNode* curB = headB;int lenA = 1;int lenB = 1;int gap = 0;while(curA){ //计算链表A的长度lenA++;curA = curA->next;}while(curB){ //计算链表B的长度lenB++;curB = curB->next;}curA = headA; //从头开始往后统一长度curB = headB;if(lenA >= lenB){ //链表A长则求出gap移动链表Agap = lenA - lenB;for(int i=0;i<gap;i++){curA = curA->next;}}else{gap = lenB - lenA;for(int i=0;i<gap;i++){curB = curB->next;}}while(curA){ //对齐后开始比较,注意是比较节点,而不是valif(curA == curB) return curA;curA = curA->next;curB = curB->next;}return NULL;}
};
这篇关于从零开始的LeetCode刷题日记:面试题 02.07. 链表相交的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!