题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
例:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
输入:head = [1,2]
输出:[2,1]
- 代码实现:
public class LC206 {
}
/**
* 双指针法
*/
class Solution {
public ListNode reverseList(ListNode head) {
//一个前驱指针
ListNode prev = null;
//当前节点
ListNode current = head;
//存储当前的节点指向
ListNode temp = null;
while (current!= null) {
//存储当前节点指向的下个元素
temp = current.next;
//反转,当前元素指向前一个元素
current.next = prev;
//指针向前移动
prev = current;
current = temp;
}
return prev;
}
}
/**
* 递归写法
*/
class Solution1 {
public ListNode reverseList(ListNode head) {
//依旧是前驱指针指向null,当前指针指向头结点
return reverse(null,head);
}
public ListNode reverse(ListNode prev,ListNode current) {
//当current指向null时,prev刚好指向之前的尾结点,也就是新链表的头结点
if (current == null) {
return prev;
}
//存储当前的节点指向
ListNode temp = null;
temp = current.next;
//反转
current.next = prev;
//更新位置
prev = current;
current = temp;
return reverse(prev,current);
}
}