当前位置:网站首页>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);
}
边栏推荐
- VTOL in Px4_ att_ Control source code analysis [supplement]
- Two methods of calling WCF service by C #
- OpenGL configuration vs2019
- Redis cluster installation
- 微服務遠程Debug,Nocalhost + Rainbond微服務開發第二彈
- 7-18 simple simulation of banking business queue
- Debezium系列之:支持 mysql8 的 set role 语句
- 行测-图形推理-6-相似图形类
- Digital transformation: five steps to promote enterprise progress
- The free styling service of Dyson's official direct store is now open for appointment. Pioneer Technology interprets the styling concept of hair care and helps consumers unlock diversified and shiny s
猜你喜欢

0-5vac to 4-20mA AC current isolated transmitter / conversion module

如何选择合适的自动化测试工具?

Px4 autonomous flight

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

Yarn cannot view the historical task log of yarn after enabling ACL user authentication. Solution

ASP.NET Core入门五

Remember aximp once Use of exe tool

100million single men and women "online dating", supporting 13billion IPOs

Unity FAQ (I) lack of references

Customer case | China law network, through observing the cloud, greatly shortens the time of fault location
随机推荐
[azure microservice service fabric] how to transfer seed nodes in the service fabric cluster
Build an "immune" barrier in the cloud to prepare your data
Revit secondary development - shielding warning prompt window
Robot autonomous exploration series papers environment code
Debezium系列之:mysql墓碑事件
7-18 simple simulation of banking business queue
「开源摘星计划」Loki实现Harbor日志的高效管理
Force deduction - question 561 - array splitting I - step by step parsing
100million single men and women "online dating", supporting 13billion IPOs
全面掌控!打造智慧城市建设的“领导驾驶舱”
Failed to initialize rosdep after installing ROS
Nx10.0 installation tutorial
Anti climbing killer
Robot autonomous exploration DSVP: code parsing
Apple further entered the financial sector through the 'virtual card' security function in IOS 16
Get the week start time and week end time of the current date
Record layoutrebuild Forcerebuildlayoutimmediate does not take effect
XMIND mind mapping software sharing
Matplotlib quick start
Leetcode1984. Minimum difference in student scores