一开始想法是先遍历到链表尾节点,再从尾节点开始指针反转。后来发现可以设置一个前置节点指针pre,直接进行指针反转。
/**
* Definition for singly-linked list.
* 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; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
// 空链表直接返回
if (head==null) {
return head;
}
// 前置节点(也是反转链表后的尾节点指向)
ListNode pre = null;
// 当前要反转的节点
ListNode tmp = head;
// 记录当前反转节点
ListNode node = head;
// 遍历反转链表
while (tmp.next != null) {
tmp = tmp.next;
node.next = pre;
pre = node;
node = tmp;
}
// 尾节点指针反转
node.next = pre;
return tmp;
}
}