题目描述:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
题源:https://leetcode-cn.com/problems/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) { /*ListNode *res=NULL; while(headA!=NULL) { ListNode *h=headB; while(h!=NULL) { if (h==headA){res=headA; break;} h=h->next; } if (res!=NULL) break; headA=headA->next; } return res;*/ //暴力法一 int l1=0,l2=0; ListNode *t=headA,*res=NULL; while (t!=NULL) { l1++; t=t->next; } t=headB; while (t!=NULL) { l2++; t=t->next; } if(l2>l1) {t=headA; headA=headB; headB=t; swap(l1,l2);} for(int i=1;i<=l1-l2;i++) headA=headA->next; while(headA!=NULL) { if (headA==headB) {res=headB; break;} headA=headA->next; headB=headB->next; } return res; } // 统计两个链表的长度,让长链表走完差值,再一起向后推动 };