劍指Offer之Java算法習(xí)題精講鏈表與二叉樹(shù)專項(xiàng)訓(xùn)練
題目一
鏈表題——反轉(zhuǎn)鏈表
根據(jù)單鏈表的頭節(jié)點(diǎn)head來(lái)返回反轉(zhuǎn)后的鏈表
具體題目如下
解法
/** * 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; } }
題目二
鏈表題——反轉(zhuǎn)鏈表
按照一定數(shù)量的節(jié)點(diǎn)來(lái)進(jìn)行反轉(zhuǎn)并返回反轉(zhuǎn)之后的鏈表
具體題目如下
解法
/** * 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; } }
題目三
鏈表題——回文鏈表
根據(jù)單鏈表的頭節(jié)點(diǎn)head來(lái)判斷該鏈表是否是回文鏈表,并返回結(jié)果
具體題目如下
解法:后序遍歷與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; } }
題目四
二叉樹(shù)題——翻轉(zhuǎn)二叉樹(shù)
根據(jù)所給的二叉樹(shù)根節(jié)點(diǎn)root來(lái)翻轉(zhuǎn)此二叉樹(shù),并返回翻轉(zhuǎn)后的二叉樹(shù)根節(jié)點(diǎn)
具體題目如下
解法
/** * 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; } }
題目五
二叉樹(shù)題——填充節(jié)點(diǎn)
給定一個(gè)完美二叉樹(shù),填充該二叉樹(shù)每個(gè)節(jié)點(diǎn)的下一個(gè)右側(cè)節(jié)點(diǎn)指針
具體題目如下
解法
/* // 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); } }
題目六
二叉樹(shù)鏈表題——將二叉樹(shù)展開(kāi)為鏈表
根據(jù)給定的二叉樹(shù)根節(jié)點(diǎn)root,將此二叉樹(shù)展開(kāi)為單鏈表
具體題目如下
解法
/** * 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; } }
到此這篇關(guān)于劍指Offer之Java算法習(xí)題精講鏈表與二叉樹(shù)專項(xiàng)訓(xùn)練的文章就介紹到這了,更多相關(guān)Java 鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項(xiàng)訓(xùn)練
- 劍指Offer之Java算法習(xí)題精講鏈表與字符串及數(shù)組
- Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之單向鏈表
- Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之環(huán)形鏈表
- Java實(shí)現(xiàn)順序表和鏈表結(jié)構(gòu)
- Java實(shí)現(xiàn)單鏈表基礎(chǔ)操作
- Java關(guān)于重排鏈表詳細(xì)解析
- Java?詳解分析鏈表的中間節(jié)點(diǎn)
- 劍指Offer之Java算法習(xí)題精講鏈表專項(xiàng)訓(xùn)練
相關(guān)文章
Maven實(shí)現(xiàn)自己的starter依賴
本文主要介紹了Maven實(shí)現(xiàn)自己的starter依賴,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04解決idea 從mapper方法直接點(diǎn)進(jìn)xml文件的問(wèn)題
這篇文章主要介紹了解決idea 從mapper方法直接點(diǎn)進(jìn)xml文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02SpringBoot+layui實(shí)現(xiàn)文件上傳功能
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。這篇文章主要介紹了SpringBoot+layui實(shí)現(xiàn)文件上傳,需要的朋友可以參考下2018-09-09IntelliJ IDEA 2020.2正式發(fā)布,兩點(diǎn)多多總能助你提效
這篇文章主要介紹了IntelliJ IDEA 2020.2正式發(fā)布,諸多亮點(diǎn)總有幾款能助你提效,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-07-07springboot本地調(diào)試沒(méi)問(wèn)題,打包運(yùn)行報(bào)錯(cuò)原因及分析
這篇文章主要介紹了springboot本地調(diào)試沒(méi)問(wèn)題,打包運(yùn)行報(bào)錯(cuò)原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05教你如何在IDEA?中添加?Maven?項(xiàng)目的?Archetype(解決添加不起作用的問(wèn)題)
這篇文章主要介紹了如何在?IDEA?中添加?Maven?項(xiàng)目的?Archetype(解決添加不起作用的問(wèn)題),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08關(guān)于Long和Integer相互轉(zhuǎn)換方式
這篇文章主要介紹了關(guān)于Long和Integer相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08SpringBoot實(shí)用小技巧之如何動(dòng)態(tài)設(shè)置日志級(jí)別
這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)用小技巧之如何動(dòng)態(tài)設(shè)置日志級(jí)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04