之前写过一个单链表翻转的题,但是当时自己对翻转的过程还是一知半解,现再次记录下自己新的理解。
循环代码中,一共有四行
第一行是为了存储next元素的值,因为下一步操作改方向,会让next元素这个值找不到位置了
第二行是为了换方向,指明 cur.next 指向哪里
第三行和第四行是为了换位置,需要找下一回他们坐在哪里。
注意到此时 cur 位置已经找到了(小板凳做好了),就是此时 next 的位置,所以要想给 pre 找位置,而下一回 pre 的位置在 cur,所以 先 pre = cur,给 pre 找好位置,然后再 cur = next 给 cur 找好位置
另外还有一个小技巧:
这四行代码中,每一行等号的右边是下一个等号的左边,利用这个小技巧,防止自己忘记顺序
public class reverselist {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while (cur != null){
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}