标签:head ListNode val 206 反转 next 链表 Java
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
该题在国内的常见算法面试题的出现次数中排第一,递归和非递归这两种方式都一定要掌握。
思路就是交换两个相邻节点的引用关系即可,使用双指针或者递归操作都可以实现,比较简单。注意理解递归的实现,我们返回的是链表的最后一个节点,也就是反转链表的头节点,都是在每次递归返回之后。
/**
* 206. 反转链表
* 反转一个单链表。
* https://leetcode-cn.com/problems/reverse-linked-list/
* 简单
*/
public class LeetCode206 {
/**
* 双指针
*/
public ListNode reverseList(ListNode head) {
//前驱
ListNode pre = null;
while (head != null) {
ListNode next = head.next;
//反转head和pre的关系
head.next = pre;
pre = head;
head = next;
}
return pre;
}
/**
* 递归
*/
public ListNode reverseList1(ListNode head) {
if (head == null || head.next == null) {
//递归到最深入之后从这里开始返回
return head;
}
ListNode next = reverseList1(head.next);
//递归方法返回后执行的步骤,反转引用关系
head.next.next = head;
head.next = null;
//返回之前链表的最后一个节点,也就是反转链表的头节点
return next;
}
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;
}
}
标签:head,ListNode,val,206,反转,next,链表,Java 来源: https://blog.csdn.net/weixin_43767015/article/details/122015196
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。