LeetCode[206]-反/翻转链表

话不多说,先上代码

/**
 * 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) {
        // 定义一个前驱节点,
        // 此节点将作为反转后的新链表的头节点返回
        ListNode pre = null;
        // 当前节点
        ListNode cur = head;
        // 当前节点非空时,循环遍历
        while (cur != null) {
            // 将当前节点的后继节点保存下来,后续使用;
            // 否则链表断开后,无法遍历后续的节点了
            ListNode next = cur.next;
            // 将当前节点的后继节点指向新链表的前驱节点
            cur.next = pre;
            
            // 下面将指针后移,遍历后续节点
            
            // 将新链表的头节点指针后移
            pre = cur;
            // 原链表的指针后移
            cur = next;
        }
        // 返回新链表的头节点
        return pre;
    }
}

下面画图解释一下原理

  1. 准备一个链表,1->2->3->4

  1. 第一遍循环

  1. 第二遍循环

  1. 第三遍循环

  1. 第四遍循环

  1. 循环结束,返回pre
posted @ 2021-08-05 14:12  超级鲨鱼辣椒  阅读(17)  评论(0编辑  收藏  举报