206. 反转链表(java实现)--3种解法(设置前驱节点,不设前驱,递归)LeetCode
2022/2/10 20:20:56
本文主要是介绍206. 反转链表(java实现)--3种解法(设置前驱节点,不设前驱,递归)LeetCode,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 题目:
- 解法1:设置前驱节点
- 解法2:不设置前驱节点
- 解法3:递归
题目:
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
解法1:设置前驱节点
/** * 思路: * 设置前驱节点pre * 反转:让current指向pre * 不断的移动pre和current,直到current==null * 返回pre */ public static ListNode reverseList(ListNode head) { ListNode pre = null; ListNode curr = head; while (curr!=null){ ListNode next = curr.next; curr.next=pre; pre=curr; curr=next; } return pre; }
时间复杂度:On
空间复杂度:O1
解法2:不设置前驱节点
/** * 思路: * 头节点指向nn * 反转:next指向curr * 循环直到next节点指向null * 返回curr */ public static ListNode reverseList(ListNode head) { if (head==null){ return head; } ListNode curr = head; ListNode next = curr.next; while (next!=null){ ListNode nn = next.next; next.next=curr; head.next=nn; curr=next; next=nn; } return curr; }
时间复杂度:On
空间复杂度:O1
解法3:递归
/** * 思路: * 递归到尾节点 * 反转相邻节点:后面的节点指向当前节点,当前节点指向null * 返回尾节点 */ public static ListNode reverseList(ListNode head) { return recursive(head); } private static ListNode recursive(ListNode head) { if (head==null||head.next==null){ return head; } //tail是最后结果的头指针 ListNode tail=recursive(head.next); head.next.next=head; head.next=null; return tail; }
时间复杂度:On
空间复杂度:On
这篇关于206. 反转链表(java实现)--3种解法(设置前驱节点,不设前驱,递归)LeetCode的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南