每天一道LeetCode-----寻找两个链表的交点
2018-02-10 15:22
621 查看
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-----两个有序数组合并后的第K个数
- 每天一道LeetCode-----删除链表倒数第n个节点
- LeetCode基础-链表-找到两个链表的交点
- 每天一道LeetCode-----逆序链表
- 每天一道LeetCode-----复制一个带有随机节点的链表
- 每天一道LeetCode-----将链表每k个节点逆序一次
- 每天一道LeetCode-----判断链表是否有环,如果有,找到环的入口位置
- 寻找两个链表的交点
- [互联网面试笔试汇总C/C++-7] 寻找两个链表的第一个交点-微策略
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 每天一道LeetCode-----链表插入排序
- 每天一道leetcode234-回文链表
- 每天一道LeetCode-----判断两个二叉树是否相同
- 每天一道LeetCode-----重排链表,节点顺序是从头取一个,从尾取一个,从头取一个,从尾取一个.....
- 每天一道LeetCode-----有序数组循环右移n位后,寻找最小值,数组中可能包含重复元素
- 每天一道LeetCode-----一个整数序列,每个元素出现两次,只有一个(两个)出现一次,找到这个(这两个)元素
- 每天一道LeetCode-----移除有序链表中的重复节点
- 每天一道算法题——合并两个排序的链表
- [互联网面试笔试汇总C/C++-8] 寻找两个链表的第一个交点-微策略