当前位置:网站首页>LeetCode206. Reverse linked list [double pointer and recursion]
LeetCode206. Reverse linked list [double pointer and recursion]
2022-07-07 22:49:00 【Qingshan's green shirt】
LeetCode206. Reverse a linked list
List of articles
1. subject
2. Ideas
1. My initial idea was to move the last node forward in turn , Later, I found two difficulties . One is that the one-way linked list cannot access the precursor nodes of the known nodes , Made some mistakes . such as :
(1)LinkNode*q; q->next = p; //q It doesn't point to p The precursor of
(2)LinkNode *q = dummyHead; q->next = p; // This will become dummyHead Of next Turn into p The linked list is wrongly arranged !
Second, if you need to access the precursor node , Every time I need to traverse , Time complexity is too high . Sum up , I gave up the idea .
2. Double pointer application . Set one front node and one rear node to move backward in sequence . Make the pointer of the following node point to the node in front of it .
3. recursive .
Let's implement it separately .
3. Code implementation
(1) Double pointer application
The basic idea of double pointer :
1. My initial idea is to count the length of the linked list , The special judgment length is 0/1 The situation of , Finally, use double pointers . This is a little complicated
2. Remember to use tmp After the node is saved, the node behind the pointer , Or you lose it
The main idea is the figure above :(1) Save node (2) Pointer reversal (3) Pointer backward
First post my initial code , Very complicated , There are many redundant steps …
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* dummyHead = new ListNode(1);// Sentinel node Consider that the header node is empty
if(head!= NULL) dummyHead->next = head;
ListNode* p = dummyHead;
int size = 0;// initialization !
while(p->next != NULL)
{
p = p->next;
size++;// Chain length
}
// It is specially judged that the empty linked list and length are 1 The situation of
if(size == 0) return nullptr;
else if(size == 1) return head;
else{
ListNode *m = dummyHead->next;
ListNode *n = dummyHead->next->next;
ListNode *tmp;
while(n != NULL)
{
// Save node
tmp = n->next;
// reverse
n->next = m;
m = n;
// Move backward
n = tmp;
}
dummyHead->next->next = nullptr;// This sentence must have a meaning
delete dummyHead;
return m;
}
}
};
Compared with the big guy's code, there are two biggest shortcomings :
1. There is no need to use sentinel nodes , Too much , And easy to lose
dummyHead->next->next = nullptr;
This step .
2. Recently, I have developed the awareness of special judgment , The empty linked list and nodes will be 1 Think about the linked list , Very happy . But special judgment is not necessary , Can be more streamlined !
The streamlined code :
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* tmp;
ListNode* m = NULL;
ListNode* n = head;
while(n != NULL)
{
// Save node
tmp = n->next;
// reverse
n->next = m;
// Move backward
m = n;
n = tmp;
}// There is no need to make a special judgment on the head node , The first step is to set NULL 了
return m;
}
};
(2) Recursive method
The same idea as double pointer
ListNode* reverse(ListNode*m,ListNode* n){
if(n == NULL) return m;// Recursive export
// Storage point
ListNode* tmp = n->next;
// In exchange for
n->next = m;
// Move backward Here I stuck for a while But it's actually the same as the double pointer idea
//m = n;
//n = tmp;
return reverse(n,tmp);
}
ListNode* reverseList(ListNode* head) {
// Is the initialization of double pointers
//ListNode* m = NULL; ListNode* n = head;
return reverse(NULL,head);
}
边栏推荐
- 微服務遠程Debug,Nocalhost + Rainbond微服務開發第二彈
- How to write an augmented matrix into TXT file
- C development -- WPF simple animation
- Two methods of calling WCF service by C #
- Cataloger integrates lidar and IMU for 2D mapping
- Antd date component appears in English
- Record layoutrebuild Forcerebuildlayoutimmediate does not take effect
- OpenGL configuration vs2019
- [interview arrangement] 0211 game engine server
- Revit secondary development - link file collision detection
猜你喜欢
Remember an experience of using selectmany
Gazebo import the mapping model created by blender
UWA Q & a collection
Form组件常用校验规则-2(持续更新中~)
Apple further entered the financial sector through the 'virtual card' security function in IOS 16
Visual studio 2019 installation
Leetcode1984. Minimum difference in student scores
How to choose the appropriate automated testing tools?
ASP. Net core introduction V
IP network active evaluation system -- x-vision
随机推荐
Get the exact offset of the element
数字化转型:五个步骤推动企业进步
C # realizes the communication between Modbus protocol and PLC
Unity local coordinates and world coordinates
This experimental syntax requires enabling the parser plugin: ‘optionalChaining‘
. Net automapper use
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
Loki, the "open source star picking program", realizes the efficient management of harbor logs
Nx10.0 installation tutorial
Revit secondary development - get the thickness / length / height of the beam
What does it mean to prefix a string with F?
Kaggle-Titanic
How to choose the appropriate automated testing tools?
【Azure微服务 Service Fabric 】在SF节点中开启Performance Monitor及设置抓取进程的方式
Debezium系列之:引入对 LATERAL 运算符的支持
Debezium系列之:支持 mysql8 的 set role 語句
行测-图形推理-6-相似图形类
OpenGL configure assimp
行测-图形推理-9-线条问题类
Remember that a development is encountered in the pit of origin string sorting