zoukankan      html  css  js  c++  java
  • 牛客题霸NC78反转链表Java题解

    牛客题霸NC78反转链表Java题解

    https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=117&&tqId=35000&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

    方法1:双指针
    解题思路:当链表为空head==null 或长度为1时,直接返回head。定义pre和cur两个节点分别指向null和head节点。然后开始从head节点依次修改指针。先利用tmp节点暂存当前节点的下一个节点,再将当前节点指向它的前一个节点pre,然后再将pre节点和当前节点cur往后移一位,再修改下一个节点的指针。

    public class Solution {
        public ListNode ReverseList(ListNode head) {
             if(head==null || head.next==null){  //判断链表为空或长度为1的情况
                 return head;
             } 
     
            ListNode pre = null;
            ListNode cur = head;
            ListNode tmp = null; //记录当前节点的下个节点
     
     
            while(cur!=null){
                tmp = cur.next;  //记录当前节点的下一个节点
                cur.next = pre;  //让当前节点的next指向前一个节点
                pre = cur;       //pre往前移动一位
                cur = tmp;       //当前节点往后移动一位
            }
            return pre;
        }
    }

    方法2:递归

    解题思路:利用递归,从后往前返回,倒序依次修改指针,完成链表反转

    /*
    public class ListNode {
        int val;
        ListNode next = null;
     
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode ReverseList(ListNode head) {
            return reverse(head,null);
        }
        private ListNode reverse(ListNode cur,ListNode pre){
            if(cur == null){  //当前节点为null时,返回
                return pre;
            }
            ListNode node = reverse(cur.next,cur);  //递归下一个节点
            cur.next = pre;    //当前节点指向前一个节点
            return node;
        }
    }
  • 相关阅读:
    性能测试概念
    接口测试概念
    SQL多表查询
    手机App测试概念
    App测试页面滑动
    自动化测试概念
    Monkey 命令
    Tomcat+JDK安装和配置
    Linux系统FTP安装、安装和使用
    Web测试方法(一)
  • 原文地址:https://www.cnblogs.com/yunfeiyang2020/p/14033977.html
Copyright © 2011-2022 走看看