每天一道LeetCode-----寻找两个链表的交点
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----寻找两个链表的交点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Intersection of Two Linked Lists
原題鏈接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) {auto lenA = listLength(headA);auto lenB = listLength(headB);if(lenA > lenB){for(auto i = 0; i != lenA - lenB; ++i)headA = headA->next;}else{for(auto i = 0; i != lenB - lenA; ++i)headB = headB->next;}while(headA && headB && headA != headB){headA = headA->next;headB = headB->next;}return headA;} private:int listLength(ListNode* head){int len = 0;while(head){++len;head = head->next;}return len;} };總結
以上是生活随笔為你收集整理的每天一道LeetCode-----寻找两个链表的交点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----实现一
- 下一篇: 每天一道LeetCode-----在给定