当前位置:网站首页>Leetcode interview question 02.07 Linked list intersection [double pointer]
Leetcode interview question 02.07 Linked list intersection [double pointer]
2022-07-07 22:49:00 【Qingshan's green shirt】
LeetCode Interview questions 02.07. The list intersects
List of articles
1. subject
2. Ideas
It should be noted that :
1. If two linked lists intersect , From the intersection point to the end of the table are the same nodes , That is, the two become one .
2. The intersection here is determined by reference ! That is, the address of the node , Not the value of the node !
Ideas :
1. Count the length of two linked lists , Subtraction .
another : I thought about it a little more here , Go to the last node and judge whether they are the same , That is, judge whether the two linked lists intersect .
2. According to the form of tail alignment , The pointer of the long linked list goes first , Go until it is aligned with the header of the short linked list .
3. The two pointers go synchronously , Stop if intersecting .
3. Code implementation
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
//1. Special judgment head node , There is really no way to intersect an empty table
if(headA == NULL || headB == NULL) return NULL;// If it is empty, there is no ? exactly
//2. Create a dummy node - It is convenient for the pointer to stop at the last node when counting the length
ListNode* dummyA = new ListNode(-1);
dummyA->next = headA;
ListNode* dummyB = new ListNode(-1);
dummyB->next = headB;
ListNode*a = dummyA;
ListNode*b = dummyB;
int sizeA = 0;int sizeB = 0;
//3. Statistical length At this time, the pointer points to the last node , Not empty !
while(a->next != NULL)
{
a = a->next;
sizeA++;
}
while(b->next != NULL)
{
b = b->next;
sizeB++;
}
delete dummyA;delete dummyB;// Deleting is a good habit
//4. If the position of the last node is the same , Is intersecting . Discussion by situation
if(a == b)
{
if(sizeA > sizeB)//A Than B Long
{
//5. Length difference
int cnt = sizeA - sizeB;
ListNode* fast = headA;
ListNode* slow = headB;
//6. Let's go first , Align with the head of the slow pointer
while(cnt--)
fast = fast->next;
//7. Go at the same time , When you encounter the starting point of intersection, you return
while(fast != slow)
{
fast = fast->next;
slow = slow->next;
}
ListNode *m = fast;
return m;
}
else //if(sizeA <= sizeB) B Than A Long or equal
// It can only be else, The compiler thinks there are other cases ...
{
int cnt = sizeB - sizeA;
ListNode* fast = headB;
ListNode* slow = headA;
while(cnt--)
fast = fast->next; // Align with the head of the slow pointer
while(fast != slow)
{
fast = fast->next;
slow = slow->next;
}
ListNode *m = fast;
return m;
}
}
else return NULL;// Disjoint , Go straight back to
}
};
Post a more concise code of the boss , Redundant code generated by case discussion is omitted , Because it can be exchanged directly ! Just a little bit .
curA = headA;
curB = headB;
// Give Way curA For the head of the longest linked list ,lenA Is its length
if (lenB > lenA) {
swap (lenA, lenB);//lenA Save large value
swap (curA, curB);//curA Refers to the head of the long linked list
}
// Length difference
int gap = lenA - lenB;
// Length difference
int gap = lenA - lenB;
// Give Way curA and curB At the same starting point ( End position alignment )
while (gap--) {
curA = curA->next;
}
// Traverse curA and curB, If you encounter the same, you will directly return
while (curA != NULL) {
if (curA == curB) {
return curA;
}
curA = curA->next;
curB = curB->next;
}
return NULL;
matters needing attention
There is a small one. tip: Count the length of the linked list. If you want the pointer to stop at the last node, you can use dummy nodes !
swap function : Exchange values at respective addresses . such as swap(a,b);a,b Are variables of the same data type .a,b The values of are assigned to b,a.
边栏推荐
- 行测-图形推理-8-图群类
- Time convolution Network + soft threshold + attention mechanism to realize residual life prediction of mechanical equipment
- 详解全志V853上的ARM A7和RISC-V E907之间的通信方式
- 行测-图形推理-5-一笔画类
- Understand the autograd package in pytorch
- Gazebo import the mapping model created by blender
- Get the exact offset of the element
- What is the difference between the three values of null Nan undefined in JS
- CTF练习
- Matplotlib quick start
猜你喜欢
Firefox browser installation impression notes clipping
Two methods of calling WCF service by C #
Gazebo import the mapping model created by blender
Apple further entered the financial sector through the 'virtual card' security function in IOS 16
Signal feature extraction +lstm to realize gear reducer fault diagnosis -matlab code
Loki, the "open source star picking program", realizes the efficient management of harbor logs
Leetcode206. Reverse linked list
如何选择合适的自动化测试工具?
[azure microservice service fabric] the service fabric cluster hangs up because the certificate expires (the upgrade cannot be completed, and the node is unavailable)
行测-图形推理-3-对称图形类
随机推荐
C development -- WPF simple animation
如何选择合适的自动化测试工具?
Record a garbled code during servlet learning
应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设
Attitude estimation (complementary filtering)
详解全志V853上的ARM A7和RISC-V E907之间的通信方式
Get the exact offset of the element
Aspose. Word operation word document (I)
Revit secondary development - project file to family file
The essence of analog Servlet
Debezium series: binlogreader for source code reading
C # Development -- pit encountered in JS intermodulation
JS number is insufficient, and 0 is added
Redis official ORM framework is more elegant than redistemplate
Firefox browser installation impression notes clipping
Redis官方ORM框架比RedisTemplate更优雅
Ni9185 and ni9234 hardware settings in Ni Max
XMIND mind mapping software sharing
苹果在iOS 16中通过'虚拟卡'安全功能进一步进军金融领域
Revit secondary development - cut view