LeetCode-链表-160. 相交链表
生活随笔
收集整理的這篇文章主要介紹了
LeetCode-链表-160. 相交链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
160. 相交鏈表
思路一:使用set用到了額外的內存,沒有達到題目要求
/*** 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) {unordered_set<ListNode*> myset;while(headA!=nullptr){myset.insert(headA);headA = headA->next;}while(headB!=nullptr){if(myset.find(headB)!=myset.end()){return headB;}else {headB = headB->next;}}return nullptr;} };思路二:
/**定義兩個指針, 第一輪讓兩個到達末尾的節點指向另一個鏈表的頭部, 最后如果相遇則為交點(在第一輪移動中恰好抹除了長度差) 兩個指針等于移動了相同的距離, 有交點就返回, 無交點就是各走了兩條指針的長度 **/ // 在這里第一輪體現在pA和pB第一次到達尾部會移向另一鏈表的表頭, 而第二輪體現在如果pA或pB相交就返回交點, 不相交最后就是null==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) {ListNode *A = headA, *B = headB;/**定義兩個指針, 第一輪讓兩個到達末尾的節點指向另一個鏈表的頭部, 最后如果相遇則為交點(在第一輪移動中恰好抹除了長度差)兩個指針等于移動了相同的距離, 有交點就返回, 無交點就是各走了兩條指針的長度**/// 在這里第一輪體現在pA和pB第一次到達尾部會移向另一鏈表的表頭, 而第二輪體現在如果pA或pB相交就返回交點, 不相交最后就是null==nullwhile(A!=B){A = A!=nullptr ? A->next : headB;B = B!=nullptr ? B->next : headA;}return A;} };總結
以上是生活随笔為你收集整理的LeetCode-链表-160. 相交链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode-滑动窗口-3. 无重复
- 下一篇: C++学习路线(最全资源整合)