1 public ListNode ReverseList(ListNode head) {
2 if (head == null) {
3 return null;
4 }
5 if (head.next == null) {
6 return head;
7 }
8 // q表示前面一个节点指针
9 // p表示当前一个节点指针
10 // r表示后面一个节点指针
11 ListNode q = null, p = head, r = p.next;
12 // 如果当前节点p不为空
13 while (p != null) {
14 p.next = q;//指向前面一个节点
15 q = p;//前面一个节点往后移动
16 p = r;//当前节点往后移动
17 if (r != null) {//最后一轮,r为空,不要再往后移动
18 r = r.next;//后面一个节点往后移动
19 }
20 }
21 // 循环结束时,q是原来的最后一个节点,也就是反转之后的头节点
22 head = q;
23 return head;
24 }