思路:
- 记录当前节点前一节点和后一节点
- 记录前一节点目的: 使得可以反转当前指针指向前一节点
- 记录后一节点目的:使得翻转指针后,还能找到下一个遍历节点,从而可以把当前节点更新过去
- 返回值 —— pre 节点
最后,cur 节点为 null, 退出循环,pre 节点为最后一个节点,即翻转后的头节点
图解:
![image.png](https://img-blog.csdnimg.cn/img_convert/f758ad91356bc62cc28dd60215152391.png)
代码:
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode next = null;
while(cur != null){
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}