当前位置:网站首页>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.
边栏推荐
- PHP method of obtaining image information
- How to choose the appropriate automated testing tools?
- 客户案例|华律网,通过观测云大幅缩短故障定位时间
- What is the difference between the three values of null Nan undefined in JS
- Debezium系列之:引入对 LATERAL 运算符的支持
- Revit secondary development - shielding warning prompt window
- Blender exchange group, welcome to the water group ~
- Add get disabled for RC form
- How to judge whether the input content is "number"
- 行测-图形推理-8-图群类
猜你喜欢

Robot autonomous exploration DSVP: code parsing

Amesim2016 and matlab2017b joint simulation environment construction

Signal feature extraction +lstm to realize gear reducer fault diagnosis -matlab code

How to judge whether the input content is "number"

UWA问答精选

“拧巴”的早教行业:万亿市场,难出巨头

php 获取图片信息的方法

Visual design form QT designer design gui single form program

行测-图形推理-7-相异图形类

Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
随机推荐
Debezium系列之:支持 mysql8 的 set role 语句
JS number is insufficient, and 0 is added
Px4 autonomous flight
Ni9185 and ni9234 hardware settings in Ni Max
行测-图形推理-9-线条问题类
C # realizes the communication between Modbus protocol and PLC
Welcome to CSDN markdown editor
Remember that a development is encountered in the pit of origin string sorting
Failed to initialize rosdep after installing ROS
戴森官方直营店免费造型服务现已开放预约 先锋科技诠释护发造型理念,助力消费者解锁多元闪耀造型
. Net automapper use
Unity FAQ (I) lack of references
筑起云端 “免疫”屏障,让你的数据有备无患
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence
Leetcode206. Reverse linked list
Remember an experience of using selectmany
变量与常量
C # Development -- pit encountered in JS intermodulation
What is the difference between the three values of null Nan undefined in JS
Debezium系列之:支持 mysql8 的 set role 語句