题目:给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null
需要注意的点:
1、定义的两个指针在遍历完链表的长度后,要重新指向头结点
2、让长、短链表的尾端对齐
3、相交意味着指针相同
class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode* curA=headA; ListNode* curB=headB; int lenA=0; int lenB=0; while(curA!=NULL)//计算链表的长度 { lenA++; curA=curA->next; } while(curB!=NULL) { lenB++; curB=curB->next; } curA=headA;//重新指向头结点 curB=headB; if(lenA<lenB)//保证最大的链表为curA,方便后续处理 { swap(lenA,lenB); swap(curA,curB); } int gap=lenA-lenB; while(gap--)//让curA移动到,和curB 末尾对齐的位置 { curA=curA->next; } while(curA!=NULL)//找出指针相同的点 { if(curA==curB) { return curA; } curA=curA->next; curB=curB->next; } return NULL; } };
标签:ListNode,相交,链表,curB,headA,curA,NULL From: https://www.cnblogs.com/gaishuobulao/p/17357392.html