public static ListNode reverseList(ListNode head) {
// 初始化pre,cur
ListNode pre = null;
ListNode cur = head;
// 当cur为null时,说明反转结束
while(cur != null) {
// 临时保存cur.next节点的值
ListNode temp = cur.next;
// cur的next指向pre
cur.next = pre;
// 注意这两步步骤不能错
pre = cur;
cur = temp;
}
return pre;
}
参考双指针法,动脑具体想一下,我把代码写出,看是否一样。
建议首先掌握双指针写法,递归写法是在双指针写法基础上而来。
public static ListNode reverseListDiGui(ListNode cur, ListNode pre) {
if (cur == null) {
return pre;
}
ListNode temp = cur.next;
cur.next = pre;
return reverseListDiGui(temp, cur);
}