160. 相交链表
题目描述
给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点,如果两个链表不存在相交节点,返回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 *pa = headA;
ListNode *pb = headB;
while(pa != pb){
if(pa == NULL){
pa = headB;
}
else{
pa = pa->next;
}
if(pb == NULL){
pb = headA;
}
else{
pb = pb->next;
}
}
return pa;
}
};