题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
// 双指针法
// 1. 判断是否是空链表或只有一个节点的链表
if (head==null||head.next==null) {
return head;
}
// 2. 遍历链表,使每个节点的下一个节点指向它的前一个节点
// 因为是单向链表,所以当前节点不知道它的上一个节点是谁,
// 我们需要使用一个 pre 指针来记录前一个节点
// 因为头节点之前没有节点,所以用 null 初始化
ListNode pre = null;
// cur 指针记录当前节点,使用头节点初始化
ListNode cur = head;
// 遍历链表必须,nextNode 指针指向下一个节点
ListNode nextNode;
// 遍历到当前节点为空为止
while (cur!=null) {
// 指向下一个节点
nextNode = cur.next;
// 将当前节点的 next 指针指向前一个节点
cur.next = pre;
// 双指针右移
pre = cur;
cur = nextNode;
}
// 最后,pre 指针记录的就是链表的头节点(原链表的尾节点)
return pre;
}
} 
