题目
leetcode-cn.com/problems/re… 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
思路
这题就比较简单明了,双指针、快慢指针实现吧。
就是先慢指针指向null,快指针指向头,让快指针next指向slow,然后一起前进,
代码
public ListNode reverseList(ListNode head) {
ListNode fast = head,slow =null;
while(fast != null){
ListNode temp = fast.next;
fast.next = slow;
slow = fast;
fast = temp;
}
return slow;
}
}
还可以用递归,递归很难想,觉得双指针就简单明了。其实这一块可以这样看,明确递归的功能:就是反转链表,第四行代码就是head之后进行反转,反转之后让它的next指向头结点,头结点的next指向null,就实现了反转
public ListNode reverseList(ListNode head) {
// 边界条件
if(head == null || head.next == null){
return head;
}
// 1)递,自前向后,先到链表最后一个节点,记为ret
// 2)归,自后向前,让下一节点的next指向当前,当前next指向null,实现反转
// 3)完成链表反转
// 返回值就是ret
ListNode ret = reverseList(head.next);
head.next.next=head;
head.next=null;
// ListNode(head.next);
return ret;
}
}