zoukankan      html  css  js  c++  java
  • 【数据结构与算法】反转链表:非递归实现

    反转链表:非递归实现

    Java
    https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-fei-di-gui-shi-xian-ros64/

    解题思路

    反转链表首先得有三个指针分别指向上一个,当前和下一个,上一个用于标记新链表,当前用于反转,下一个用于标记旧链表,当前反转之后,新旧链表改动,则新链表头指向新链表头cur,cur指向下一个要处理的节点,即next,next指向下一个要处理的节点的下一个,否则修改下一个节点后就丢失了旧链表。大致示意图如下:
    链表

    代码

    /**
     * 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,cur,next;
    
            // 初始化引用,这里next要保证cur不为空才有,所以稍后处理
            cur = head;
            pre = null;
    
            // 直到没有要被处理的节点
            while (cur != null){
                // next引用,确保找得到旧链表
                next = cur.next;
    
                // 修改当前节点的next引用,引用到前面的元素
                cur.next = pre;
    
                // 经过上一步操作后,pre指向新的头节点
                pre = cur;
                // 指向下一个要处理的元素
                cur = next;
            }
    
            // 返回新链表的头结点
            return pre;
        }
    }
    
  • 相关阅读:
    细菌(disease)
    素数路(prime)
    母亲的牛奶(milk)
    Counting Islands II
    Popular Products
    Binary Watch
    BZOJ 1822[JSOI2010]Frozen Nova 冷冻波
    尝试一下LLJ大佬的理论AC大法
    BZOJ 3626 [LNOI2014]LCA
    BZOJ 3319 黑白树
  • 原文地址:https://www.cnblogs.com/minuy/p/15208189.html
Copyright © 2011-2022 走看看