206.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

img

1
2
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

关键在于,选择中间的那个节点作为过度

Solution

在指针转向的过程中,需要注意到几个问题

  1. 如果表示要反转的2个结点?
  2. 假设结点从2指向了1,那么怎么找到3?

答案是双指针和用临时变量储存3这个结点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null; //前一个节点
ListNode curr = head; //当前指针
while (curr != null) {
ListNode next = curr.next; //临时变量储存当前结点的下一个结点,防止找不到
curr.next = prev; // 改变指针方向
prev = curr; // 前一个指针往后移动
curr = next; //当前指针向后移动
}
return prev; //最后是prev!=null

}
}