160. 相交連結串列 力扣(簡單) 連結串列題總有點不熟練
阿新 • • 發佈:2021-07-03
題目描述:
給你兩個單鏈表的頭節點headA 和 headB ,請你找出並返回兩個單鏈表相交的起始節點。如果兩個連結串列沒有交點,返回 null 。
圖示兩個連結串列在節點 c1 開始相交:
題目資料 保證 整個鏈式結構中不存在環。
注意,函式返回結果後,連結串列必須 保持其原始結構 。
題源:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
程式碼:
/** * 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 *res=NULL; while(headA!=NULL) { ListNode *h=headB; while(h!=NULL) { if (h==headA){res=headA; break;} h=h->next; } if (res!=NULL) break; headA=headA->next; } return res;*/ //暴力法一 int l1=0,l2=0; ListNode *t=headA,*res=NULL; while (t!=NULL) { l1++; t=t->next; } t=headB; while (t!=NULL) { l2++; t=t->next; } if(l2>l1) {t=headA; headA=headB; headB=t; swap(l1,l2);} for(int i=1;i<=l1-l2;i++) headA=headA->next; while(headA!=NULL) { if (headA==headB) {res=headB; break;} headA=headA->next; headB=headB->next; } return res; } // 統計兩個連結串列的長度,讓長連結串列走完差值,再一起向後推動 };