思路:1、分别遍历两个链表,记录两个链表的长度,尾结点相同就是相交,否则就不相交 2、求第一个交点:长的链表先走(长度差)步,再同时走,第一个相同就是交点 struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) { struct ListNode* tail1 = pHead1; struct ListNode* tail2 = pHead2; int len1 = 1; int len2 = 1; while(tail1) { tail1 = tail1->next; len1++; } while(tail2) { tail2 = tail2->next; len2++; } if(tail1 != tail2) return NULL; int len = abs(len1-len2); struct ListNode* longlist = pHead1; struct ListNode* shortlist = pHead2; if(len1 < len2) { longlist = pHead2; shortlist = pHead1; } while(len--) { longlist = longlist->next; } while(longlist != shortlist) { longlist = longlist->next; shortlist = shortlist->next; } return longlist; }