实话说,这个题不算简单,要非常清楚每次怎么样。画图。

关键

  1. 是while循环到 head != null
  2. 循环体中有3个节点;每次只是反转一个link,并移动两个节点
  3. next每次都是head下一个节点,后面next赋值给head, 所以当nextnull的时候,head就会是null;
  4. 此时prev刚好不是null, 返回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
while (head != null) {
ListNode next = head.next;
head.next = prev;
prev = head;
head = next;
}
return prev;
}
}