欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

劍指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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Maven實現自己的starter依賴

    Maven實現自己的starter依賴

    本文主要介紹了Maven實現自己的starter依賴,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 解決idea 從mapper方法直接點進xml文件的問題

    解決idea 從mapper方法直接點進xml文件的問題

    這篇文章主要介紹了解決idea 從mapper方法直接點進xml文件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot+layui實現文件上傳功能

    SpringBoot+layui實現文件上傳功能

    Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。這篇文章主要介紹了SpringBoot+layui實現文件上傳,需要的朋友可以參考下
    2018-09-09
  • IntelliJ IDEA 2020.2正式發(fā)布,兩點多多總能助你提效

    IntelliJ IDEA 2020.2正式發(fā)布,兩點多多總能助你提效

    這篇文章主要介紹了IntelliJ IDEA 2020.2正式發(fā)布,諸多亮點總有幾款能助你提效,本文通過圖文實例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2020-07-07
  • springboot本地調試沒問題,打包運行報錯原因及分析

    springboot本地調試沒問題,打包運行報錯原因及分析

    這篇文章主要介紹了springboot本地調試沒問題,打包運行報錯原因及分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Mybatis分頁插件使用方法詳解

    Mybatis分頁插件使用方法詳解

    這篇文章主要為大家詳細介紹了Mybatis分頁插件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 教你如何在IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題)

    教你如何在IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題)

    這篇文章主要介紹了如何在?IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 關于Long和Integer相互轉換方式

    關于Long和Integer相互轉換方式

    這篇文章主要介紹了關于Long和Integer相互轉換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 帶你入門java雪花算法原理

    帶你入門java雪花算法原理

    SnowFlake 算法,是 Twitter 開源的分布式 id 生成算法。其核心思想就是:使用一個 64 bit 的 long 型的數字作為全局唯一 id。在分布式系統(tǒng)中的應用十分廣泛,且ID 引入了時間戳,基本上保持自增的
    2021-06-06
  • SpringBoot實用小技巧之如何動態(tài)設置日志級別

    SpringBoot實用小技巧之如何動態(tài)設置日志級別

    這篇文章主要給大家介紹了關于SpringBoot實用小技巧之如何動態(tài)設置日志級別的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04

最新評論