(一)题目描述
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
(二)解题思路
(1)迭代:设置双指针pre、curr,将next的方向反转即可
//双指针法:设置pre、curr指针,将next的方向进行反转即可
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode curr=head;
while (curr!=null){
//首先得记录curr-next的位置,因为后面其位置会被改变
ListNode next=curr.next;
curr.next=pre;
pre=curr;
curr=next;
}
return head;
}
}
(2)递归解法
参考: 力扣
代码如下
//递归解法:
class Solution {
public ListNode reverseList(ListNode head) {
// 递归终止条件,即递去过程的操作
if (head==null||head.next==null){
return head;
}
ListNode p=reverseList(head.next);
//归来过程的操作
head.next.next=head;
head.next=null;
// 返回已解决的子问题,即已排好序的子链表
return p;
}
}