题目描述:160. 相交链表 - 力扣(LeetCode)
给你两个单链表的头节点
headA
和headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null
。
注:本题中链表相交是“Y”型的,而不是“X”型的,因为本题是单链表,每一个节点中只有一个指针域,也就意味着一个节点只能指向一个节点。
题解思路:
- 判断两链表最后一个节点是否为同一个节点(节点地址是否相同):如果是同一个节点,则两链表相交,找到相交起点的节点;如果不是同一个节点,两链表不相交,返回NULL;
- 分别遍历两链表得到两个链表的节点个数count1、count2;
- 找到相交起点的节点:用两个指针cur1、cur2指向两链表的头节点,先让较长链表cur向后移动(count1-count2)绝对值个数的节点,然后同时向后移动,当 cur1 和 cur2 指向节点的地址相同时,这个节点就是相交节点的起点。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{int count1 = 0, count2 = 0;struct ListNode * cur1 = headA, *cur2 = headB;struct ListNode * longList = headA;struct ListNode * shirtList = headB;while(cur1){count1++;cur1 = cur1->next;}while(cur2){count2++;cur2 = cur2->next;}if(cur1 != cur2){return NULL;}else{// 找到相交起点if(count1<count2){longList = headB;shirtList = headA;}int temp = abs(count1-count2);while(temp--){longList = longList->next;}while(longList != shirtList){longList = longList->next;shirtList = shirtList->next;}}return shirtList;
}
本次内容到此结束了!如果你觉得这篇博客对你有帮助的话 ,希望你能够给我点个赞,鼓励一下我。感谢感谢……