剑指 Offer 24. 反转链表

思路:

  设置三个指针,cur 指向当前节点, pre 指向上一节点,tmp 指向下一节点。

  一开始 cur 指向头节点,pre 与 tmp 置null(可以将其视作循环链表,则 pre 为头节点的上一节点)

  遍历链表时,cur 移向下一节点,cur.next 指向上一节点 pre,实现链表反转。

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        ListNode tmp = null;
        while (cur != null) {
            tmp = cur.next;//tmp指向下一个节点
            cur.next = pre;//cur.next指向pre,即指向前一节点
            pre = cur;//pre 暂存当前节点
            cur = tmp;//cur 移至下一节点
        }
        return pre;//当cur移至下一节点且cur == null时,pre为链表尾结点
    }
}
posted @ 2021-03-09 19:09  zjcfrancis  阅读(41)  评论(0编辑  收藏  举报