其他分享
首页 > 其他分享> > 160. 相交链表

160. 相交链表

作者:互联网

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution 
10 {
11 public:
12     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
13     {
14         if(headA == NULL || headB == NULL) return NULL;
15         int lenA = 0,lenB = 0;
16 
17         ListNode* tempA = headA;//求链表长度不要直接用headA,用一个临时对象
18         ListNode* tempB = headB;
19         while(tempA || tempB)
20         {
21             if(tempA) lenA++,tempA = tempA->next;
22             if(tempB) lenB++,tempB = tempB->next;
23         }
24 
25         int len = lenA > lenB ? lenA - lenB : lenB - lenA;
26         int step = lenA > lenB ? lenB : lenA;
27         ListNode *first = headA;
28         ListNode *second = headB;
29 
30         if(lenA < lenB) first = headB,second = headA;
31 
32         while(len-- && first) first = first->next;//先走len步后,链表A与B的个数相同
33         
34         while(step-- && first && second)//然后同时走,直到相遇
35         {
36             if(first == second) break;
37             first = first->next,second = second->next;
38         }
39         return first;
40     }
41 };

 

标签:lenB,lenA,ListNode,相交,next,链表,second,160,first
来源: https://www.cnblogs.com/yuhong1103/p/12548621.html