当前位置:网站首页>Leetcode-206. Reverse Linked List
Leetcode-206. Reverse Linked List
2022-07-07 07:30:00 【Eistert】
subject
Given the head of a singly linked list, reverse the list, and return the reversed list.
Example 1:

Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]
Example 2:

Input: head = [1,2]
Output: [2,1]
Example 3:
Input: head = []
Output: []
Constraints:
The number of nodes in the list is the range [0, 5000].
-5000 <= Node.val <= 5000
solution
Method 1 : iteration
Suppose the linked list is 1→2→3→∅, We want to change it to ∅←1←2←3.
When traversing a linked list , Set the... Of the current node next The pointer changes to point to the previous node . Because the node does not refer to its previous node , So you have to store its previous node in advance . Before changing the reference , You also need to store the latter node . Finally, the new header reference is returned .
Code
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}
Complexity analysis
Time complexity :O(n), among nn It's the length of the list . You need to traverse the linked list once .
Spatial complexity :O(1).
Method 2 : recursive
Code
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */
class Solution {
/** * To list 1->2->3->4->5 give an example * @param head * @return */
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
/* Returns the current node until the next node of the current node is empty because 5 There is no next node , So the node is returned here 5 */
return head;
}
// Recursively pass in the next node , The purpose is to reach the last node
ListNode newHead = reverseList(head.next);
/* The first round of stack ,head by 5,head.next It's empty , return 5 The second round of stack ,head by 4,head.next by 5, perform head.next.next=head That is to say 5.next=4, Point the child nodes of the child nodes of the current node to the current node At this time, the linked list is 1->2->3->4<->5, because 4 And 5 Point to each other , So disconnect here 4.next=null At this time, the linked list is 1->2->3->4<-5 Return to node 5 The third round of stack ,head by 3,head.next by 4, perform head.next.next=head That is to say 4.next=3, At this time, the linked list is 1->2->3<->4<-5, because 3 And 4 Point to each other , So disconnect here 3.next=null At this time, the linked list is 1->2->3<-4<-5 Return to node 5 The fourth round of stack ,head by 2,head.next by 3, perform head.next.next=head That is to say 3.next=2, At this time, the linked list is 1->2<->3<-4<-5, because 2 And 3 Point to each other , So disconnect here 2.next=null At this time, the linked list is 1->2<-3<-4<-5 Return to node 5 The fifth round comes out of the stack ,head by 1,head.next by 2, perform head.next.next=head That is to say 2.next=1, At this time, the linked list is 1<->2<-3<-4<-5, because 1 And 2 Point to each other , So disconnect here 1.next=null At this time, the linked list is 1<-2<-3<-4<-5 Return to node 5 Stack out complete , Final header node 5->4->3->2->1 */
head.next.next = head;
head.next = null;
return newHead;
}
}
Complexity analysis
Time complexity :O(n), among nn It's the length of the list . You need to reverse each node of the linked list .
Spatial complexity :O(n), among nn It's the length of the list . The space complexity mainly depends on the stack space of recursive calls , At most nn layer .
source
author :LeetCode-Solution
link :https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/
source : Power button (LeetCode)
The copyright belongs to the author . Commercial reprint please contact the author for authorization , Non-commercial reprint please indicate the source .
边栏推荐
- 机器人技术创新与实践旧版本大纲
- 我理想的软件测试人员发展状态
- sql中对集合进行非空校验
- How can a 35 year old programmer build a technological moat?
- Freeswitch dials extension number source code tracking
- Docker compose start redis cluster
- 组件的嵌套和拆分
- Invalid table alias or column reference`xxx`
- 三、高质量编程与性能调优实战 青训营笔记
- [explanation of JDBC and internal classes]
猜你喜欢

外包干了三年,废了...

The currently released SKU (sales specification) information contains words that are suspected to have nothing to do with baby

Bindingexception exception (error reporting) processing

Model application of time series analysis - stock price prediction

2、 Concurrent and test notes youth training camp notes

外包干了四年,废了...

Non empty verification of collection in SQL

Paranoid unqualified company

How can a 35 year old programmer build a technological moat?

抽丝剥茧C语言(高阶)数据的储存+练习
随机推荐
js小练习----分时提醒问候、表单密码显示隐藏效果、文本框焦点事件、关闭广告
Role of virtual machine
记一个并发规则验证实现
C language (high-level) data storage + Practice
【Liunx】进程控制和父子进程
Differences between H5 architecture and native architecture
Select the product attribute pop-up box to pop up the animation effect from the bottom
Communication of components
JS small exercise ---- time sharing reminder and greeting, form password display hidden effect, text box focus event, closing advertisement
基于Flask搭建个人网站
Build personal website based on flask
1090: integer power (multi instance test)
PostgreSQL source code (59) analysis of transaction ID allocation and overflow judgment methods
[Luogu p1971] rabbit and egg game (bipartite game)
Blue Bridge Cup Netizen age (violence)
深度学习花书+机器学习西瓜书电子版我找到了
Dynamics CRM server deployment - restore database prompt: the database is in use
URP - shaders and materials - simple lit
freeswitch拨打分机号源代码跟踪
The annual salary of general test is 15W, and the annual salary of test and development is 30w+. What is the difference between the two?