标签:int 复杂 相交 时间复杂度 info src code bubuko 程序
编写一个程序,找到两个单链表相交的起始节点。
例如,下面的两个链表:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
在节点 c1 开始相交。
注意:
null
.
方法一:
1 /* C++ */ 2 /** 3 * Definition for singly-linked list. 4 * struct ListNode { 5 * int val; 6 * ListNode *next; 7 * ListNode(int x) : val(x), next(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 13 if(headA == NULL || headB == NULL){ 14 return NULL; 15 } 16 ListNode *a = headA; 17 ListNode *b = headB; 18 // 计算A和B的长度 19 int lenA = 0,lenB = 0; 20 while(a->next != NULL){ 21 a = a->next; 22 lenA++; 23 } 24 while(b->next != NULL){ 25 b = b->next; 26 lenB++; 27 } 28 int step = lenB - lenA; 29 if(step>0){ 30 //说明B长 31 a = headB; 32 b = headA; 33 }else{// 说明A长 34 a = headA; 35 b = headB; 36 step *= -1; 37 } 38 while(step -- ){ 39 a = a->next; 40 } 41 while(a != b){ 42 a = a->next;b = b->next; 43 } 44 return a; 45 } 46 };
标签:int 复杂 相交 时间复杂度 info src code bubuko 程序
原文地址:https://www.cnblogs.com/yxh-amysear/p/9608796.html