当前位置:网站首页>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.
边栏推荐
- How to judge whether the input content is "number"
- Revit secondary development - link file collision detection
- How to quickly check whether the opening area ratio of steel mesh conforms to ipc7525
- Customer case | China law network, through observing the cloud, greatly shortens the time of fault location
- Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
- Variables and constants
- How to realize the movement control of characters in horizontal game
- Two methods of calling WCF service by C #
- Details of the open source framework of microservice architecture
- Yarn开启ACL用户认证之后无法查看Yarn历史任务日志解决办法
猜你喜欢

UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence

Visual studio 2019 installation

Amesim2016 and matlab2017b joint simulation environment construction

What does it mean to prefix a string with F?

Yarn开启ACL用户认证之后无法查看Yarn历史任务日志解决办法
苹果在iOS 16中通过'虚拟卡'安全功能进一步进军金融领域

PHP method of obtaining image information

How to quickly check whether the opening area ratio of steel mesh conforms to ipc7525

IP网络主动测评系统——X-Vision

Micro service remote debug, nocalhost + rainbow micro service development second bullet
随机推荐
Dayu200 experience officer MPPT photovoltaic power generation project dayu200, hi3861, Huawei cloud iotda
Leetcode1984. Minimum difference in student scores
Explain in detail the communication mode between arm A7 and risc-v e907 on Quanzhi v853
Debezium series: introducing support for the final operator
Remember that a development is encountered in the pit of origin string sorting
Visual design form QT designer design gui single form program
苹果在iOS 16中通过'虚拟卡'安全功能进一步进军金融领域
Revit secondary development - Hide occlusion elements
Gazebo import the mapping model created by blender
Add get disabled for RC form
. Net automapper use
Welcome to CSDN markdown editor
Write in front -- Talking about program development
How to judge whether the input content is "number"
行测-图形推理-8-图群类
The PHP source code of the new website + remove authorization / support burning goose instead of pumping
Revit secondary development - operation family documents
Form组件常用校验规则-2(持续更新中~)
Use blocconsumer to build responsive components and monitor status at the same time
Dbsync adds support for mongodb and ES