当前位置:网站首页>See once to understand, graphic single chain table inversion
See once to understand, graphic single chain table inversion
2020-11-07 20:56:00 【Snail boy】
Preface
Reverse linked list is the basic quality of programmers , Often in interviews 、 In the process of written examination . I always think that the implementation code of reverse linked list is not well understood , Decided to move leetcode The classic reverse list problem came out , Use more than ten pictures to analyze it , We hope to deepen our understanding of the inversion of linked list , Thank you for reading .
leetcode The original problem of reverse chain list & answer
Title Description : Invert a single chain table .
Input :
1
->
2
->
3
->
4
->
5
->
NULL
Output :
5
->
4
->
3
->
2
->
1
->
NULL
analysis :
Suppose there are linked lists 1 → 2 → 3 → Ø, We want to change it to Ø ← 1 ← 2 ← 3.
When traversing the list , Set the... Of the current node next The pointer changes to the previous element . Because the node does not refer to its previous node , So you have to store its previous element in advance . Before changing the reference , Another pointer is needed to store the next node . Don't forget to return a new header reference at the end !
Code implementation :
public
ListNode
reverseList
(
ListNode
head
)
{
ListNode
prev
=
null
;
ListNode
curr
=
head
;
while
(
curr
!=
null
)
{
ListNode
nextTemp
=
curr
.
next
;
curr
.
next
=
prev
;
prev
=
curr
;
curr
=
nextTemp
;
}
return
prev
;
}
The realization of reverse code of diagram linked list
Next , We illustrate the above code implementation , First, add line number to the above implementation code , as follows :
public
ListNode
reverseList
(
ListNode
head
)
{
//1
ListNode
prev
=
null
;
// 2
ListNode
curr
=
head
;
// 3
while
(
curr
!=
null
)
{
//4
ListNode
nextTemp
=
curr
.
next
;
//5
curr
.
next
=
prev
;
// 6
prev
=
curr
;
//7
curr
=
nextTemp
;
//8
}
return
prev
;
//9
}
The first line of code illustration
public
ListNode
reverseList
(
ListNode
head
)
{
//1
Let's describe the meaning according to the topic , Suppose the list has 1、2、3 An element , And then there's a null, And because the input is ListNode head, So the list to be reversed is as follows :
The second line is a code illustration
ListNode
prev
=
null
;
// 2

take null Assign a value to prev, namely prev Point to null, The available figures are as follows :
The third line is the code illustration
ListNode
curr
=
head
;
Link list head Assign a value to curr, namely curr Point to head Linked list , The available figures are as follows :
Loop part code diagram
while
(
curr
!=
null
)
{
//4
ListNode
nextTemp
=
curr
.
next
;
//5
curr
.
next
=
prev
;
// 6
prev
=
curr
;
//7
curr
=
nextTemp
;
//8
}
The loop part is the core part of the list inversion , Let's go through the cycle first , Graphic analysis of a wave .
because curr Yes head,head Not for null, So into the cycle . First of all, let's see No 5 That's ok :
ListNode
nextTemp
=
curr
.
next
;
//5
hold curr.next Assign a value to nextTemp Variable , namely nextTemp Point to curr The next node of ( That is node 2), The available figures are as follows :
Then go to 6 That's ok :
curr
.
next
=
prev
;
// 6
hold prev Assign a value to curr.next, because prev Initializing points to null, namely curr( node 1) Yes null, This is the diagram of the list :
Then we see the implementation of the 7 That's ok
prev
=
curr
;
//7
hold curr Assign a value to prev,prev Point to curr, The diagram is as follows :
next , Let's go to 8 That's ok :
curr
=
nextTemp
;
//8
hold nextTemp Assign a value to curr, namely curr Point to nextTemp, The diagram is as follows :
thus , The first cycle is over , Go back to the cycle condition ,curr Still not null, Let's go on and finish it .
5-8 Run the line code again , You can get pictures in turn :
ListNode
nextTemp
=
curr
.
next
;
//5
curr
.
next
=
prev
;
// 6
prev
=
curr
;
//7
curr
=
nextTemp
;
//8
After execution ListNodenextTemp=curr.next; after :
After execution curr.next=prev; after :
After execution prev=curr; after :
After execution curr=nextTemp; after :
Come here , Find out curr Or not for null, Back to while loop , Execute it again :
ListNode
nextTemp
=
curr
.
next
;
//5
curr
.
next
=
prev
;
// 6
prev
=
curr
;
//7
curr
=
nextTemp
;
//8
You can get pictures in turn :




Come here , We found that curr Have been to null 了 , Can jump out of the loop . Now prev It points to the reverse of the list , So the first 9 The line is finished , The function of reverse linked list is realized :
return
prev
;
//9
Reference and thanks
- LeetCode Official website
Official account number

- If you are a good child who loves learning , You can pay attention to my official account. , Study and discuss together .
- If you think there is something wrong with this article , Can comment , You can also pay attention to my official account. , Talk to me in private , Let's learn and improve together .
版权声明
本文为[Snail boy]所创,转载请带上原文链接,感谢
边栏推荐
- Insight -- the application of sanet in arbitrary style transfer
- How Facebook open source framework simplifies pytorch experiment
- More than 50 object detection datasets from different industries
- Got timeout reading communication packets解决方法
- The emergence and significance of micro service
- C language I blog assignment 03
- android基础-RadioButton(单选按钮)
- Jingtao project day09
- 统计文本中字母的频次(不区分大小写)
- Kylin on Kubernetes 在 eBay 的实践
猜你喜欢

计组-总线通信控制之异步串行通信的数据传输

面部识别:攻击类型和反欺骗技术

Principles of websocket + probuf

Design pattern of facade and mediator

Let's talk about the locks in the database

Jingtao project day09

使用 Xunit.DependencyInjection 改造测试项目

工作1-3年的程序员,应该具备怎么样的技术能力?该如何提升?

聊聊Go代码覆盖率技术与最佳实践

Git code submission operation, and git push prompt failed to push some refs'xxx '
随机推荐
三步一坑五步一雷,高速成长下的技术团队怎么带?
关于晋升全栈工程师,从入门到放弃的神功秘籍,不点进来看一看?
DOM节点操作
android基础-RadioButton(单选按钮)
Big data algorithm - bloon filter
Sentry 安装
「混合云」会是云计算的下一个战场吗?
微信小程序request报400错误 @RequestBody接收不到
Recommend suicide, openai warns: gpt-3 is too risky for medical purposes
There's not much time left for Kwai Chung.
虚拟DOM中给同一层级的元素设置固定且唯一的key为什么能提高性能
Do not understand the underlying principle of database index? That's because you don't have a B tree in your heart
AFO
Cpp(一) 安装CMake
Insight -- the application of sanet in arbitrary style transfer
Implementation of multi GPU distributed training with horovod in Amazon sagemaker pipeline mode
Cpp(二) 创建Cpp工程
Dynamic programming -- state compression DP of set represented by binary
获取树形菜单列表
awk实现类sql的join操作