相交鏈表
160. 相交鏈表 - 力扣(LeetCode)
思路就是遍歷兩個鏈表,有相同的部分就可以視為相交。
但是長度不一樣,比如兩個會相交的鏈表,headA
?的長度為?a + c
,headB
?的長度為?b + c
,其中?c
?是公共部分的長度。
指針pA遍歷完后從headA跳轉到headB,pB遍歷完headB跳成A。
這樣的話最后遍歷a+b+c,肯定會最后同時到達相交節點的。
同理不相交的話會遍歷a+b,最后會pA=pB=NULL,最后返回空
/*** 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) {if(headA==NULL||headB==NULL){return NULL;}ListNode *a=headA;ListNode *b=headB;//定義指針while(a!=b){if(a==NULL){a=headB;}else{a=a->next;}if(b==NULL){b=headA;}else{b=b->next;}}return a;}
};