最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

劍指Offer之Java算法習題精講鏈表與二叉樹專項訓練

 更新時間:2022年03月22日 08:38:17   作者:明天一定.  
跟著思路走,之后從簡單題入手,反復去看,做過之后可能會忘記,之后再做一次,記不住就反復做,反復尋求思路和規(guī)律,慢慢積累就會發(fā)現質的變化

題目一

鏈表題——反轉鏈表

根據單鏈表的頭節(jié)點head來返回反轉后的鏈表

具體題目如下

解法

/**
 * 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,nxt;
        pre = null;
        cur = head;
        nxt = head;
        while(cur!=null){
            nxt = cur.next;
            cur.next = pre;
            pre = cur;
            cur = nxt;
        }
        return pre;
    }
}

題目二

鏈表題——反轉鏈表

按照一定數量的節(jié)點來進行反轉并返回反轉之后的鏈表

具體題目如下

解法

/**
 * 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 reverseKGroup(ListNode head, int k) {
         if (head == null) return null;
         ListNode a, b;
         a = b = head;
         for (int i = 0; i < k; i++) {
            if (b == null) return head;
             b = b.next;
         }
         ListNode newHead = reverse(a, b);
         a.next = reverseKGroup(b, k);
         return newHead;
    }
    ListNode reverse(ListNode a, ListNode b) {
        ListNode pre,cur,nxt;
        pre = null;
        cur = a;
        nxt = a;
        while(cur!=b){
            nxt = cur.next;
            cur.next = pre;
            pre = cur;
            cur = nxt;
        }
        return pre;
    }
}

題目三

鏈表題——回文鏈表

根據單鏈表的頭節(jié)點head來判斷該鏈表是否是回文鏈表,并返回結果

具體題目如下

解法:后序遍歷與left比較

/**
 * 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 {
    ListNode left;
    public boolean isPalindrome(ListNode head) {
        left = head;
        return traverse(head);
    }
    boolean traverse(ListNode right){
        if (right == null) return true;
        boolean res = traverse(right.next);
        res = res && (right.val == left.val);
        left = left.next;
        return res;
    }
}

題目四

二叉樹題——翻轉二叉樹

根據所給的二叉樹根節(jié)點root來翻轉此二叉樹,并返回翻轉后的二叉樹根節(jié)點

具體題目如下

 解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null){
            return null;
        }
        TreeNode lf = invertTree(root.left);
        TreeNode rg = invertTree(root.right);
        root.left = rg;
        root.right = lf;
        return root;
    }
}

題目五

二叉樹題——填充節(jié)點

給定一個完美二叉樹,填充該二叉樹每個節(jié)點的下一個右側節(jié)點指針

具體題目如下

解法

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;
    public Node() {}
    
    public Node(int _val) {
        val = _val;
    }
    public Node(int _val, Node _left, Node _right, Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/
 
class Solution {
    public Node connect(Node root) {
        if(root==null) return null;
        method(root.left,root.right);
        return root;
    }
    public void method(Node left,Node right){
        if (left == null || right == null) {
            return;
        }
        left.next = right;
        method(left.left,left.right);
        method(right.left,right.right);
        method(left.right,right.left);
    }
}

題目六

二叉樹鏈表題——將二叉樹展開為鏈表

根據給定的二叉樹根節(jié)點root,將此二叉樹展開為單鏈表

具體題目如下

解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public void flatten(TreeNode root) {
        if (root == null) return;
 
        flatten(root.left);
        flatten(root.right);
 
        TreeNode left = root.left;
        TreeNode right = root.right;
 
        root.left = null;
        root.right = left;
 
        TreeNode p = root;
        while (p.right != null) {
            p = p.right;
        }
        p.right = right;
    }
}

到此這篇關于劍指Offer之Java算法習題精講鏈表與二叉樹專項訓練的文章就介紹到這了,更多相關Java 鏈表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring復雜對象創(chuàng)建的方式小結

    Spring復雜對象創(chuàng)建的方式小結

    這篇文章主要介紹了Spring復雜對象創(chuàng)建的三種方式,現在使用Spring如何創(chuàng)建這種類型的對象?Spring中提供了三種方法來創(chuàng)建復雜對象,需要的朋友可以參考下
    2022-01-01
  • Java初學者常問的問題(推薦)

    Java初學者常問的問題(推薦)

    本文介紹一些Java初學者常問的問題,很多朋友對可以用%除以一個小數嗎? a += b 和 a = a + b 的效果有區(qū)別嗎? 聲明一個數組為什么需要花費大量時間? 為什么Java庫不用隨機pivot方式的快速排序?等等一系列問題有疑惑,下面就通過本文給大家詳細介紹下
    2017-03-03
  • java使用MulticastSocket實現多點廣播

    java使用MulticastSocket實現多點廣播

    這篇文章主要為大家詳細介紹了java使用MulticastSocket實現多點廣播,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • java streamfilter list 過濾的實現

    java streamfilter list 過濾的實現

    Java Stream API中的filter方法是過濾List集合中元素的一個強大工具,可以輕松地根據自定義條件篩選出符合要求的元素,本文就來介紹一下java streamfilter list 過濾的實現,感興趣的可以了解一下
    2025-03-03
  • SpringBoot整合Servlet和Filter和Listener組件詳解

    SpringBoot整合Servlet和Filter和Listener組件詳解

    這篇文章主要介紹了SpringBoot整合Servlet和Filter和Listener組件詳解,在整合某報表插件時就需要使用Servlet,Spring Boot中對于整合這些基本的Web組件也提供了很好的支持,需要的朋友可以參考下
    2024-01-01
  • 詳解Java實現批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片

    詳解Java實現批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片

    這篇文章主要介紹了Java實現批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • spring使用@Async注解導致循環(huán)依賴問題異常的排查記錄

    spring使用@Async注解導致循環(huán)依賴問題異常的排查記錄

    這篇文章主要介紹了spring使用@Async注解導致循環(huán)依賴問題異常的排查記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 基于Spring開發(fā)之自定義標簽及其解析

    基于Spring開發(fā)之自定義標簽及其解析

    Spring框架是現在Java最流行的開源框架之一,需要實現一些自定義的標簽,主要是方便使用我們框架的人能夠快速、簡單進行配置,有興趣的可以了解一下。
    2017-04-04
  • 淺談Java序列化和hessian序列化的差異

    淺談Java序列化和hessian序列化的差異

    這篇文章主要通過對二者簡單的實現方式的對比,介紹了Java序列化和hessian序列化的差異,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Java探索之Feign入門使用詳解

    Java探索之Feign入門使用詳解

    這篇文章主要介紹了Java探索之Feign入門使用詳解,關于feign,我也是第一次遇到,于是在網上搜集了相關文章,這篇比較詳細,介紹了其簡介,選擇feign的原因以及其他相關內容,需要的朋友可以參考下。
    2017-10-10

最新評論

老河口市| 祥云县| 民乐县| 德江县| 任丘市| 新宾| 米泉市| 榆林市| 鄯善县| 儋州市| 响水县| 宜都市| 肃北| 莱芜市| 深水埗区| 龙陵县| 仲巴县| 灵丘县| 红原县| 柘城县| 崇文区| 独山县| 武川县| 湘潭市| 永城市| 元朗区| 图木舒克市| 白玉县| 麦盖提县| 南通市| 改则县| 乃东县| 黎城县| 稷山县| 白城市| 焦作市| 余干县| 浦县| 汕尾市| 衡南县| 西林县|